<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://animalcookie.trumpetz.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Buildababe</id>
	<title>P1NK AN1MAL C00K13 G1RAFF3 PLUSH13 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://animalcookie.trumpetz.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Buildababe"/>
	<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php/Special:Contributions/Buildababe"/>
	<updated>2026-04-10T02:03:45Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=380</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=380"/>
		<updated>2026-04-10T00:19:02Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// Adds a search box that filters category members in real time&lt;br /&gt;
if (document.querySelector(&#039;.mw-category&#039;)) {&lt;br /&gt;
  const input = document.createElement(&#039;input&#039;);&lt;br /&gt;
  input.placeholder = &#039;Filter pages...&#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(&#039;.mw-category&#039;).before(input);&lt;br /&gt;
  input.addEventListener(&#039;input&#039;, () =&amp;gt; {&lt;br /&gt;
    document.querySelectorAll(&#039;.mw-category li&#039;).forEach(li =&amp;gt; {&lt;br /&gt;
      li.style.display = li.textContent.toLowerCase()&lt;br /&gt;
        .includes(input.value.toLowerCase()) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
   WIKI COMMON.JS — Bundled Scripts&lt;br /&gt;
   Paste into Special:EditPage/MediaWiki:Common.js&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     1. RANDOM WELCOME MESSAGE on the main page&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var greetings = [&lt;br /&gt;
    &amp;quot;Welcome to the show! 🎪&amp;quot;,&lt;br /&gt;
    &amp;quot;Step right up! 🎠&amp;quot;,&lt;br /&gt;
    &amp;quot;The circus is in town! 🎡&amp;quot;,&lt;br /&gt;
    &amp;quot;Tonight&#039;s performance begins now! 🎭&amp;quot;,&lt;br /&gt;
  ];&lt;br /&gt;
  var subtitleEl = document.querySelector(&#039;.circus-subtitle&#039;);&lt;br /&gt;
  if (subtitleEl) {&lt;br /&gt;
    subtitleEl.textContent = greetings[Math.floor(Math.random() * greetings.length)];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     2. CARDS CYCLE THROUGH COLORS on hover&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var cardColors = [&#039;#29b6f6&#039;,&#039;#f06292&#039;,&#039;#ab47bc&#039;,&#039;#66bb6a&#039;,&#039;#ffa726&#039;];&lt;br /&gt;
  document.querySelectorAll(&#039;.circus-card&#039;).forEach(function (card) {&lt;br /&gt;
    card.addEventListener(&#039;mouseenter&#039;, function () {&lt;br /&gt;
      var c = cardColors[Math.floor(Math.random() * cardColors.length)];&lt;br /&gt;
      card.style.borderColor = c;&lt;br /&gt;
      var icon = card.querySelector(&#039;.circus-card-icon&#039;);&lt;br /&gt;
      if (icon) icon.style.color = c;&lt;br /&gt;
    });&lt;br /&gt;
    card.addEventListener(&#039;mouseleave&#039;, function () {&lt;br /&gt;
      card.style.borderColor = &#039;&#039;;&lt;br /&gt;
      var icon = card.querySelector(&#039;.circus-card-icon&#039;);&lt;br /&gt;
      if (icon) icon.style.color = &#039;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     3. LOGO SPIN on click&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var logo = document.querySelector(&#039;.circus-logo-inner&#039;);&lt;br /&gt;
  if (logo) {&lt;br /&gt;
    logo.style.transition = &#039;transform 0.6s cubic-bezier(0.34,1.56,0.64,1)&#039;;&lt;br /&gt;
    logo.style.cursor = &#039;pointer&#039;;&lt;br /&gt;
    logo.addEventListener(&#039;click&#039;, function () {&lt;br /&gt;
      logo.style.transform = &#039;rotate(360deg) scale(1.2)&#039;;&lt;br /&gt;
      setTimeout(function () { logo.style.transform = &#039;&#039;; }, 600);&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     4. TYPEWRITER EFFECT on wiki subtitle&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var typeEl = document.querySelector(&#039;.circus-subtitle&#039;);&lt;br /&gt;
  if (typeEl) {&lt;br /&gt;
    var fullText = typeEl.textContent;&lt;br /&gt;
    typeEl.textContent = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    var type = function () {&lt;br /&gt;
      if (i &amp;lt; fullText.length) {&lt;br /&gt;
        typeEl.textContent += fullText[i++];&lt;br /&gt;
        setTimeout(type, 40);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    type();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     5. DARK MODE TOGGLE button (bottom-right)&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var darkBtn = document.createElement(&#039;button&#039;);&lt;br /&gt;
  darkBtn.title = &#039;Toggle dark mode&#039;;&lt;br /&gt;
  darkBtn.style.cssText = [&lt;br /&gt;
    &#039;position:fixed&#039;,&#039;top:90px&#039;,&#039;right:16px&#039;,&lt;br /&gt;
    &#039;width:40px&#039;,&#039;height:40px&#039;,&#039;border-radius:50%&#039;,&lt;br /&gt;
    &#039;border:2px solid #b3e5fc&#039;,&#039;background:#f0f8ff&#039;,&lt;br /&gt;
    &#039;font-size:18px&#039;,&#039;cursor:pointer&#039;,&#039;z-index:9999&#039;,&lt;br /&gt;
    &#039;display:flex&#039;,&#039;align-items:center&#039;,&#039;justify-content:center&#039;&lt;br /&gt;
  ].join(&#039;;&#039;);&lt;br /&gt;
  document.body.appendChild(darkBtn);&lt;br /&gt;
&lt;br /&gt;
  var darkCSS = [&lt;br /&gt;
    &#039;html,body,#content,.mw-body,.mw-page-container,&#039;,&lt;br /&gt;
    &#039;#mw-panel,.vector-menu-portal,#mw-head{&#039;,&lt;br /&gt;
    &#039;background-color:#0d1b2a!important;color:#cde8f6!important}&#039;,&lt;br /&gt;
    &#039;.circus-card{background:#122336!important;border-color:#1e4060!important}&#039;,&lt;br /&gt;
    &#039;.circus-title{color:#4fc3f7!important}&#039;,&lt;br /&gt;
    &#039;a{color:#4fc3f7!important}&#039;&lt;br /&gt;
  ].join(&#039;&#039;);&lt;br /&gt;
  var darkStyle = document.createElement(&#039;style&#039;);&lt;br /&gt;
  document.head.appendChild(darkStyle);&lt;br /&gt;
&lt;br /&gt;
  function applyDark(on) {&lt;br /&gt;
    darkStyle.textContent = on ? darkCSS : &#039;&#039;;&lt;br /&gt;
    darkBtn.textContent = on ? &#039;☀️&#039; : &#039;🌙&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  darkBtn.addEventListener(&#039;click&#039;, function () {&lt;br /&gt;
    var isDark = localStorage.getItem(&#039;wikiDarkMode&#039;) === &#039;1&#039;;&lt;br /&gt;
    localStorage.setItem(&#039;wikiDarkMode&#039;, isDark ? &#039;0&#039; : &#039;1&#039;);&lt;br /&gt;
    applyDark(!isDark);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  applyDark(localStorage.getItem(&#039;wikiDarkMode&#039;) === &#039;1&#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     6. WORD COUNT on article pages&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var contentArea = document.querySelector(&#039;#mw-content-text&#039;);&lt;br /&gt;
  var isEditing = document.querySelector(&#039;.action-edit, .action-submit&#039;);&lt;br /&gt;
  if (contentArea &amp;amp;&amp;amp; !isEditing) {&lt;br /&gt;
    var words = contentArea.innerText.trim().split(/\s+/).length;&lt;br /&gt;
    var wordBar = document.createElement(&#039;div&#039;);&lt;br /&gt;
    wordBar.style.cssText = &#039;font-family:Nunito,sans-serif;font-size:0.85em;color:#4a7a9e;margin-bottom:12px;&#039;;&lt;br /&gt;
    wordBar.textContent = &#039;📄 &#039; + words.toLocaleString() + &#039; words&#039;;&lt;br /&gt;
    contentArea.prepend(wordBar);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     7. &amp;quot;LAST EDITED X AGO&amp;quot; in the footer&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var lastMod = document.querySelector(&#039;#footer-info-lastmod&#039;);&lt;br /&gt;
  if (lastMod) {&lt;br /&gt;
    var match = lastMod.textContent.match(/(\d{1,2} \w+ \d{4})/);&lt;br /&gt;
    if (match) {&lt;br /&gt;
      var edited = new Date(match[1]);&lt;br /&gt;
      var mins = Math.floor((Date.now() - edited) / 60000);&lt;br /&gt;
      var ago = mins &amp;lt; 60&lt;br /&gt;
        ? mins + &#039; minutes ago&#039;&lt;br /&gt;
        : mins &amp;lt; 1440&lt;br /&gt;
          ? Math.floor(mins / 60) + &#039; hours ago&#039;&lt;br /&gt;
          : Math.floor(mins / 1440) + &#039; days ago&#039;;&lt;br /&gt;
      lastMod.textContent += &#039; (&#039; + ago + &#039;)&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     8. HIGHLIGHT RED LINKS with a tooltip&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  document.querySelectorAll(&#039;a.new&#039;).forEach(function (link) {&lt;br /&gt;
    link.title = &#039;⚠️ This page does not exist yet — click to create it!&#039;;&lt;br /&gt;
    link.style.cssText = &#039;background:#fff0f3;border-radius:4px;padding:1px 4px;text-decoration:none!important;&#039;;&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     9. COPY BUTTON on code blocks&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  document.querySelectorAll(&#039;pre&#039;).forEach(function (pre) {&lt;br /&gt;
    var copyBtn = document.createElement(&#039;button&#039;);&lt;br /&gt;
    copyBtn.textContent = &#039;Copy&#039;;&lt;br /&gt;
    copyBtn.style.cssText = [&lt;br /&gt;
      &#039;float:right&#039;,&#039;padding:2px 10px&#039;,&#039;font-size:0.8em&#039;,&lt;br /&gt;
      &#039;border:2px solid #b3e5fc&#039;,&#039;border-radius:10px&#039;,&lt;br /&gt;
      &#039;background:#f0f8ff&#039;,&#039;cursor:pointer&#039;,&lt;br /&gt;
      &#039;font-family:Nunito,sans-serif&#039;&lt;br /&gt;
    ].join(&#039;;&#039;);&lt;br /&gt;
    copyBtn.addEventListener(&#039;click&#039;, function () {&lt;br /&gt;
      navigator.clipboard.writeText(pre.innerText).then(function () {&lt;br /&gt;
        copyBtn.textContent = &#039;Copied!&#039;;&lt;br /&gt;
        setTimeout(function () { copyBtn.textContent = &#039;Copy&#039;; }, 2000);&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
    pre.prepend(copyBtn);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     10. PRESS &amp;quot;/&amp;quot; TO FOCUS SEARCH&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  document.addEventListener(&#039;keydown&#039;, function (e) {&lt;br /&gt;
    var tag = document.activeElement.tagName;&lt;br /&gt;
    if (e.key === &#039;/&#039; &amp;amp;&amp;amp; tag !== &#039;INPUT&#039; &amp;amp;&amp;amp; tag !== &#039;TEXTAREA&#039;) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      var searchBox = document.querySelector(&#039;#searchInput, .vector-search-box input&#039;);&lt;br /&gt;
      if (searchBox) searchBox.focus();&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     11. STICKY TOC — highlights current section while scrolling&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var toc = document.querySelector(&#039;#toc&#039;);&lt;br /&gt;
  var headings = document.querySelectorAll(&#039;h2, h3&#039;);&lt;br /&gt;
  if (toc &amp;amp;&amp;amp; headings.length) {&lt;br /&gt;
    window.addEventListener(&#039;scroll&#039;, function () {&lt;br /&gt;
      var current = &#039;&#039;;&lt;br /&gt;
      headings.forEach(function (h) {&lt;br /&gt;
        if (window.scrollY &amp;gt;= h.offsetTop - 100) current = h.id;&lt;br /&gt;
      });&lt;br /&gt;
      toc.querySelectorAll(&#039;a&#039;).forEach(function (a) {&lt;br /&gt;
        var active = a.href.includes(current) &amp;amp;&amp;amp; current !== &#039;&#039;;&lt;br /&gt;
        a.style.color = active ? &#039;#0288d1&#039; : &#039;&#039;;&lt;br /&gt;
        a.style.fontWeight = active ? &#039;900&#039; : &#039;&#039;;&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     12. RANDOM ARTICLE BUTTON on main page&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var heroEl = document.querySelector(&#039;.circus-hero&#039;);&lt;br /&gt;
  var isMainPage = document.title.toLowerCase().includes(&#039;main&#039;);&lt;br /&gt;
  if (heroEl &amp;amp;&amp;amp; isMainPage) {&lt;br /&gt;
    var randBtn = document.createElement(&#039;a&#039;);&lt;br /&gt;
    randBtn.href = &#039;/wiki/Special:Random&#039;;&lt;br /&gt;
    randBtn.textContent = &#039;🎲 Take me somewhere random!&#039;;&lt;br /&gt;
    randBtn.style.cssText = [&lt;br /&gt;
      &#039;display:inline-block&#039;,&#039;margin-top:10px&#039;,&lt;br /&gt;
      &#039;padding:10px 24px&#039;,&#039;border-radius:24px&#039;,&lt;br /&gt;
      &#039;background:#29b6f6&#039;,&#039;color:white!important&#039;,&lt;br /&gt;
      &#039;font-family:Nunito,sans-serif&#039;,&#039;font-weight:700&#039;,&lt;br /&gt;
      &#039;font-size:1em&#039;,&#039;text-decoration:none!important&#039;,&lt;br /&gt;
      &#039;transition:transform 0.2s&#039;&lt;br /&gt;
    ].join(&#039;;&#039;);&lt;br /&gt;
    randBtn.addEventListener(&#039;mouseenter&#039;, function () { randBtn.style.transform = &#039;scale(1.05)&#039;; });&lt;br /&gt;
    randBtn.addEventListener(&#039;mouseleave&#039;, function () { randBtn.style.transform = &#039;&#039;; });&lt;br /&gt;
    heroEl.appendChild(randBtn);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     13. COLOR-CODED CATEGORY TAGS&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var catPalette = [&lt;br /&gt;
    &#039;#29b6f6&#039;,&#039;#f06292&#039;,&#039;#ab47bc&#039;,&#039;#66bb6a&#039;,&lt;br /&gt;
    &#039;#ffa726&#039;,&#039;#ef5350&#039;,&#039;#26c6da&#039;,&#039;#d4e157&#039;&lt;br /&gt;
  ];&lt;br /&gt;
  document.querySelectorAll(&#039;#catlinks a&#039;).forEach(function (a) {&lt;br /&gt;
    var idx = a.textContent.charCodeAt(0) % catPalette.length;&lt;br /&gt;
    var c = catPalette[idx];&lt;br /&gt;
    a.style.cssText = [&lt;br /&gt;
      &#039;background:&#039; + c + &#039;22&#039;,&lt;br /&gt;
      &#039;color:&#039; + c,&lt;br /&gt;
      &#039;border:1.5px solid &#039; + c + &#039;66&#039;,&lt;br /&gt;
      &#039;border-radius:12px&#039;,&lt;br /&gt;
      &#039;padding:2px 10px&#039;,&lt;br /&gt;
      &#039;margin:2px&#039;,&lt;br /&gt;
      &#039;display:inline-block&#039;,&lt;br /&gt;
      &#039;font-weight:700&#039;,&lt;br /&gt;
      &#039;text-decoration:none!important&#039;&lt;br /&gt;
    ].join(&#039;;&#039;);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     14. LIVE SEARCH FILTER on category pages&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var catSection = document.querySelector(&#039;.mw-category&#039;);&lt;br /&gt;
  if (catSection) {&lt;br /&gt;
    var filterInput = document.createElement(&#039;input&#039;);&lt;br /&gt;
    filterInput.placeholder = &#039;🔍 Filter pages...&#039;;&lt;br /&gt;
    filterInput.style.cssText = [&lt;br /&gt;
      &#039;display:block&#039;,&#039;margin:12px 0&#039;,&#039;padding:8px 16px&#039;,&lt;br /&gt;
      &#039;border:2px solid #b3e5fc&#039;,&#039;border-radius:20px&#039;,&lt;br /&gt;
      &#039;font-family:Nunito,sans-serif&#039;,&#039;font-size:1em&#039;,&#039;width:300px&#039;&lt;br /&gt;
    ].join(&#039;;&#039;);&lt;br /&gt;
    catSection.before(filterInput);&lt;br /&gt;
    filterInput.addEventListener(&#039;input&#039;, function () {&lt;br /&gt;
      var val = filterInput.value.toLowerCase();&lt;br /&gt;
      document.querySelectorAll(&#039;.mw-category li&#039;).forEach(function (li) {&lt;br /&gt;
        li.style.display = li.textContent.toLowerCase().includes(val) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----------------------------------------------------------&lt;br /&gt;
   LOADING SCREEN&lt;br /&gt;
   ---------------------------------------------------------- */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  // Create the overlay&lt;br /&gt;
  var overlay = document.createElement(&#039;div&#039;);&lt;br /&gt;
  overlay.id = &#039;wiki-loader&#039;;&lt;br /&gt;
  overlay.style.cssText = [&lt;br /&gt;
    &#039;position:fixed&#039;,&#039;top:0&#039;,&#039;left:0&#039;,&lt;br /&gt;
    &#039;width:100vw&#039;,&#039;height:100vh&#039;,&lt;br /&gt;
    &#039;background:#f0f8ff&#039;,&lt;br /&gt;
    &#039;display:flex&#039;,&#039;flex-direction:column&#039;,&lt;br /&gt;
    &#039;align-items:center&#039;,&#039;justify-content:center&#039;,&lt;br /&gt;
    &#039;z-index:99999&#039;,&#039;transition:opacity 0.6s ease&#039;&lt;br /&gt;
  ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
  // Logo&lt;br /&gt;
  var logo = document.createElement(&#039;div&#039;);&lt;br /&gt;
  logo.textContent = &#039;📖&#039;;&lt;br /&gt;
  logo.style.cssText = [&lt;br /&gt;
    &#039;width:100px&#039;,&#039;height:100px&#039;,&#039;border-radius:50%&#039;,&lt;br /&gt;
    &#039;background:linear-gradient(145deg,#4fc3f7,#0288d1)&#039;,&lt;br /&gt;
    &#039;display:flex&#039;,&#039;align-items:center&#039;,&#039;justify-content:center&#039;,&lt;br /&gt;
    &#039;font-size:48px&#039;,&#039;margin-bottom:24px&#039;,&lt;br /&gt;
    &#039;animation:pulse 1s infinite alternate&#039;&lt;br /&gt;
  ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
  // Wiki name&lt;br /&gt;
  var title = document.createElement(&#039;div&#039;);&lt;br /&gt;
  title.textContent = document.title.split(&#039; - &#039;)[0] || &#039;Wiki&#039;;&lt;br /&gt;
  title.style.cssText = [&lt;br /&gt;
    &#039;font-family:Nunito,sans-serif&#039;,&#039;font-weight:900&#039;,&lt;br /&gt;
    &#039;font-size:2em&#039;,&#039;color:#0288d1&#039;,&#039;margin-bottom:20px&#039;&lt;br /&gt;
  ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
  // Stripe bar (decorative) &lt;br /&gt;
  var stripes = document.createElement(&#039;div&#039;);&lt;br /&gt;
  stripes.style.cssText = [&lt;br /&gt;
    &#039;width:200px&#039;,&#039;height:8px&#039;,&#039;border-radius:4px&#039;,&lt;br /&gt;
    &#039;background:repeating-linear-gradient(&#039;,&lt;br /&gt;
    &#039;90deg,#29b6f6 0px,#29b6f6 20px,#ffffff 20px,#ffffff 40px)&#039;,&lt;br /&gt;
    &#039;margin-bottom:20px&#039;&lt;br /&gt;
  ].join(&#039;&#039;);&lt;br /&gt;
&lt;br /&gt;
  // Progress bar track&lt;br /&gt;
  var track = document.createElement(&#039;div&#039;);&lt;br /&gt;
  track.style.cssText = [&lt;br /&gt;
    &#039;width:200px&#039;,&#039;height:6px&#039;,&#039;border-radius:4px&#039;,&lt;br /&gt;
    &#039;background:#b3e5fc&#039;,&#039;overflow:hidden&#039;&lt;br /&gt;
  ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
  // Progress bar fill&lt;br /&gt;
  var bar = document.createElement(&#039;div&#039;);&lt;br /&gt;
  bar.style.cssText = [&lt;br /&gt;
    &#039;height:100%&#039;,&#039;width:0%&#039;,&#039;border-radius:4px&#039;,&lt;br /&gt;
    &#039;background:#0288d1&#039;,&#039;transition:width 0.3s ease&#039;&lt;br /&gt;
  ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
  // Loading text&lt;br /&gt;
  var loadText = document.createElement(&#039;div&#039;);&lt;br /&gt;
  loadText.textContent = &#039;Loading...&#039;;&lt;br /&gt;
  loadText.style.cssText = [&lt;br /&gt;
    &#039;font-family:Nunito,sans-serif&#039;,&#039;font-size:0.9em&#039;,&lt;br /&gt;
    &#039;color:#4a7a9e&#039;,&#039;margin-top:12px&#039;&lt;br /&gt;
  ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
  // Pulse animation&lt;br /&gt;
  var style = document.createElement(&#039;style&#039;);&lt;br /&gt;
  style.textContent = [&lt;br /&gt;
    &#039;@keyframes pulse{&#039;,&lt;br /&gt;
    &#039;from{transform:scale(1)}&#039;,&lt;br /&gt;
    &#039;to{transform:scale(1.08)}&#039;,&lt;br /&gt;
    &#039;}&#039;&lt;br /&gt;
  ].join(&#039;&#039;);&lt;br /&gt;
  document.head.appendChild(style);&lt;br /&gt;
&lt;br /&gt;
  // Assemble&lt;br /&gt;
  track.appendChild(bar);&lt;br /&gt;
  overlay.appendChild(logo);&lt;br /&gt;
  overlay.appendChild(title);&lt;br /&gt;
  overlay.appendChild(stripes);&lt;br /&gt;
  overlay.appendChild(track);&lt;br /&gt;
  overlay.appendChild(loadText);&lt;br /&gt;
  document.body.prepend(overlay);&lt;br /&gt;
&lt;br /&gt;
  // Animate the progress bar&lt;br /&gt;
  var messages = [&lt;br /&gt;
    &#039;Raising the tent...&#039;,&lt;br /&gt;
    &#039;Warming up the performers...&#039;,&lt;br /&gt;
    &#039;Polishing the wiki...&#039;,&lt;br /&gt;
    &#039;Almost ready...&#039;,&lt;br /&gt;
    &#039;Welcome!&#039;&lt;br /&gt;
  ];&lt;br /&gt;
  var progress = 0;&lt;br /&gt;
  var msgIndex = 0;&lt;br /&gt;
&lt;br /&gt;
  var ticker = setInterval(function () {&lt;br /&gt;
    progress += Math.random() * 18 + 8;&lt;br /&gt;
    if (progress &amp;gt; 100) progress = 100;&lt;br /&gt;
    bar.style.width = progress + &#039;%&#039;;&lt;br /&gt;
    if (msgIndex &amp;lt; messages.length) {&lt;br /&gt;
      loadText.textContent = messages[msgIndex++];&lt;br /&gt;
    }&lt;br /&gt;
    if (progress &amp;gt;= 100) clearInterval(ticker);&lt;br /&gt;
  }, 300);&lt;br /&gt;
&lt;br /&gt;
  // Hide when page is fully loaded&lt;br /&gt;
  window.addEventListener(&#039;load&#039;, function () {&lt;br /&gt;
    bar.style.width = &#039;100%&#039;;&lt;br /&gt;
    loadText.textContent = &#039;Welcome!&#039;;&lt;br /&gt;
    setTimeout(function () {&lt;br /&gt;
      overlay.style.opacity = &#039;0&#039;;&lt;br /&gt;
      setTimeout(function () { overlay.remove(); }, 600);&lt;br /&gt;
    }, 400);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=379</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=379"/>
		<updated>2026-04-10T00:12:19Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// Adds a search box that filters category members in real time&lt;br /&gt;
if (document.querySelector(&#039;.mw-category&#039;)) {&lt;br /&gt;
  const input = document.createElement(&#039;input&#039;);&lt;br /&gt;
  input.placeholder = &#039;Filter pages...&#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(&#039;.mw-category&#039;).before(input);&lt;br /&gt;
  input.addEventListener(&#039;input&#039;, () =&amp;gt; {&lt;br /&gt;
    document.querySelectorAll(&#039;.mw-category li&#039;).forEach(li =&amp;gt; {&lt;br /&gt;
      li.style.display = li.textContent.toLowerCase()&lt;br /&gt;
        .includes(input.value.toLowerCase()) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
   WIKI COMMON.JS — Bundled Scripts&lt;br /&gt;
   Paste into Special:EditPage/MediaWiki:Common.js&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     1. RANDOM WELCOME MESSAGE on the main page&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var greetings = [&lt;br /&gt;
    &amp;quot;Welcome to the show! 🎪&amp;quot;,&lt;br /&gt;
    &amp;quot;Step right up! 🎠&amp;quot;,&lt;br /&gt;
    &amp;quot;The circus is in town! 🎡&amp;quot;,&lt;br /&gt;
    &amp;quot;Tonight&#039;s performance begins now! 🎭&amp;quot;,&lt;br /&gt;
  ];&lt;br /&gt;
  var subtitleEl = document.querySelector(&#039;.circus-subtitle&#039;);&lt;br /&gt;
  if (subtitleEl) {&lt;br /&gt;
    subtitleEl.textContent = greetings[Math.floor(Math.random() * greetings.length)];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     2. CARDS CYCLE THROUGH COLORS on hover&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var cardColors = [&#039;#29b6f6&#039;,&#039;#f06292&#039;,&#039;#ab47bc&#039;,&#039;#66bb6a&#039;,&#039;#ffa726&#039;];&lt;br /&gt;
  document.querySelectorAll(&#039;.circus-card&#039;).forEach(function (card) {&lt;br /&gt;
    card.addEventListener(&#039;mouseenter&#039;, function () {&lt;br /&gt;
      var c = cardColors[Math.floor(Math.random() * cardColors.length)];&lt;br /&gt;
      card.style.borderColor = c;&lt;br /&gt;
      var icon = card.querySelector(&#039;.circus-card-icon&#039;);&lt;br /&gt;
      if (icon) icon.style.color = c;&lt;br /&gt;
    });&lt;br /&gt;
    card.addEventListener(&#039;mouseleave&#039;, function () {&lt;br /&gt;
      card.style.borderColor = &#039;&#039;;&lt;br /&gt;
      var icon = card.querySelector(&#039;.circus-card-icon&#039;);&lt;br /&gt;
      if (icon) icon.style.color = &#039;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     3. LOGO SPIN on click&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var logo = document.querySelector(&#039;.circus-logo-inner&#039;);&lt;br /&gt;
  if (logo) {&lt;br /&gt;
    logo.style.transition = &#039;transform 0.6s cubic-bezier(0.34,1.56,0.64,1)&#039;;&lt;br /&gt;
    logo.style.cursor = &#039;pointer&#039;;&lt;br /&gt;
    logo.addEventListener(&#039;click&#039;, function () {&lt;br /&gt;
      logo.style.transform = &#039;rotate(360deg) scale(1.2)&#039;;&lt;br /&gt;
      setTimeout(function () { logo.style.transform = &#039;&#039;; }, 600);&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     4. TYPEWRITER EFFECT on wiki subtitle&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var typeEl = document.querySelector(&#039;.circus-subtitle&#039;);&lt;br /&gt;
  if (typeEl) {&lt;br /&gt;
    var fullText = typeEl.textContent;&lt;br /&gt;
    typeEl.textContent = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    var type = function () {&lt;br /&gt;
      if (i &amp;lt; fullText.length) {&lt;br /&gt;
        typeEl.textContent += fullText[i++];&lt;br /&gt;
        setTimeout(type, 40);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    type();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     5. DARK MODE TOGGLE button (bottom-right)&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var darkBtn = document.createElement(&#039;button&#039;);&lt;br /&gt;
  darkBtn.title = &#039;Toggle dark mode&#039;;&lt;br /&gt;
  darkBtn.style.cssText = [&lt;br /&gt;
    &#039;position:fixed&#039;,&#039;top:90px&#039;,&#039;right:16px&#039;,&lt;br /&gt;
    &#039;width:40px&#039;,&#039;height:40px&#039;,&#039;border-radius:50%&#039;,&lt;br /&gt;
    &#039;border:2px solid #b3e5fc&#039;,&#039;background:#f0f8ff&#039;,&lt;br /&gt;
    &#039;font-size:18px&#039;,&#039;cursor:pointer&#039;,&#039;z-index:9999&#039;,&lt;br /&gt;
    &#039;display:flex&#039;,&#039;align-items:center&#039;,&#039;justify-content:center&#039;&lt;br /&gt;
  ].join(&#039;;&#039;);&lt;br /&gt;
  document.body.appendChild(darkBtn);&lt;br /&gt;
&lt;br /&gt;
  var darkCSS = [&lt;br /&gt;
    &#039;html,body,#content,.mw-body,.mw-page-container,&#039;,&lt;br /&gt;
    &#039;#mw-panel,.vector-menu-portal,#mw-head{&#039;,&lt;br /&gt;
    &#039;background-color:#0d1b2a!important;color:#cde8f6!important}&#039;,&lt;br /&gt;
    &#039;.circus-card{background:#122336!important;border-color:#1e4060!important}&#039;,&lt;br /&gt;
    &#039;.circus-title{color:#4fc3f7!important}&#039;,&lt;br /&gt;
    &#039;a{color:#4fc3f7!important}&#039;&lt;br /&gt;
  ].join(&#039;&#039;);&lt;br /&gt;
  var darkStyle = document.createElement(&#039;style&#039;);&lt;br /&gt;
  document.head.appendChild(darkStyle);&lt;br /&gt;
&lt;br /&gt;
  function applyDark(on) {&lt;br /&gt;
    darkStyle.textContent = on ? darkCSS : &#039;&#039;;&lt;br /&gt;
    darkBtn.textContent = on ? &#039;☀️&#039; : &#039;🌙&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  darkBtn.addEventListener(&#039;click&#039;, function () {&lt;br /&gt;
    var isDark = localStorage.getItem(&#039;wikiDarkMode&#039;) === &#039;1&#039;;&lt;br /&gt;
    localStorage.setItem(&#039;wikiDarkMode&#039;, isDark ? &#039;0&#039; : &#039;1&#039;);&lt;br /&gt;
    applyDark(!isDark);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  applyDark(localStorage.getItem(&#039;wikiDarkMode&#039;) === &#039;1&#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     6. WORD COUNT on article pages&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var contentArea = document.querySelector(&#039;#mw-content-text&#039;);&lt;br /&gt;
  var isEditing = document.querySelector(&#039;.action-edit, .action-submit&#039;);&lt;br /&gt;
  if (contentArea &amp;amp;&amp;amp; !isEditing) {&lt;br /&gt;
    var words = contentArea.innerText.trim().split(/\s+/).length;&lt;br /&gt;
    var wordBar = document.createElement(&#039;div&#039;);&lt;br /&gt;
    wordBar.style.cssText = &#039;font-family:Nunito,sans-serif;font-size:0.85em;color:#4a7a9e;margin-bottom:12px;&#039;;&lt;br /&gt;
    wordBar.textContent = &#039;📄 &#039; + words.toLocaleString() + &#039; words&#039;;&lt;br /&gt;
    contentArea.prepend(wordBar);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     7. &amp;quot;LAST EDITED X AGO&amp;quot; in the footer&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var lastMod = document.querySelector(&#039;#footer-info-lastmod&#039;);&lt;br /&gt;
  if (lastMod) {&lt;br /&gt;
    var match = lastMod.textContent.match(/(\d{1,2} \w+ \d{4})/);&lt;br /&gt;
    if (match) {&lt;br /&gt;
      var edited = new Date(match[1]);&lt;br /&gt;
      var mins = Math.floor((Date.now() - edited) / 60000);&lt;br /&gt;
      var ago = mins &amp;lt; 60&lt;br /&gt;
        ? mins + &#039; minutes ago&#039;&lt;br /&gt;
        : mins &amp;lt; 1440&lt;br /&gt;
          ? Math.floor(mins / 60) + &#039; hours ago&#039;&lt;br /&gt;
          : Math.floor(mins / 1440) + &#039; days ago&#039;;&lt;br /&gt;
      lastMod.textContent += &#039; (&#039; + ago + &#039;)&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     8. HIGHLIGHT RED LINKS with a tooltip&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  document.querySelectorAll(&#039;a.new&#039;).forEach(function (link) {&lt;br /&gt;
    link.title = &#039;⚠️ This page does not exist yet — click to create it!&#039;;&lt;br /&gt;
    link.style.cssText = &#039;background:#fff0f3;border-radius:4px;padding:1px 4px;text-decoration:none!important;&#039;;&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     9. COPY BUTTON on code blocks&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  document.querySelectorAll(&#039;pre&#039;).forEach(function (pre) {&lt;br /&gt;
    var copyBtn = document.createElement(&#039;button&#039;);&lt;br /&gt;
    copyBtn.textContent = &#039;Copy&#039;;&lt;br /&gt;
    copyBtn.style.cssText = [&lt;br /&gt;
      &#039;float:right&#039;,&#039;padding:2px 10px&#039;,&#039;font-size:0.8em&#039;,&lt;br /&gt;
      &#039;border:2px solid #b3e5fc&#039;,&#039;border-radius:10px&#039;,&lt;br /&gt;
      &#039;background:#f0f8ff&#039;,&#039;cursor:pointer&#039;,&lt;br /&gt;
      &#039;font-family:Nunito,sans-serif&#039;&lt;br /&gt;
    ].join(&#039;;&#039;);&lt;br /&gt;
    copyBtn.addEventListener(&#039;click&#039;, function () {&lt;br /&gt;
      navigator.clipboard.writeText(pre.innerText).then(function () {&lt;br /&gt;
        copyBtn.textContent = &#039;Copied!&#039;;&lt;br /&gt;
        setTimeout(function () { copyBtn.textContent = &#039;Copy&#039;; }, 2000);&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
    pre.prepend(copyBtn);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     10. PRESS &amp;quot;/&amp;quot; TO FOCUS SEARCH&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  document.addEventListener(&#039;keydown&#039;, function (e) {&lt;br /&gt;
    var tag = document.activeElement.tagName;&lt;br /&gt;
    if (e.key === &#039;/&#039; &amp;amp;&amp;amp; tag !== &#039;INPUT&#039; &amp;amp;&amp;amp; tag !== &#039;TEXTAREA&#039;) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      var searchBox = document.querySelector(&#039;#searchInput, .vector-search-box input&#039;);&lt;br /&gt;
      if (searchBox) searchBox.focus();&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     11. STICKY TOC — highlights current section while scrolling&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var toc = document.querySelector(&#039;#toc&#039;);&lt;br /&gt;
  var headings = document.querySelectorAll(&#039;h2, h3&#039;);&lt;br /&gt;
  if (toc &amp;amp;&amp;amp; headings.length) {&lt;br /&gt;
    window.addEventListener(&#039;scroll&#039;, function () {&lt;br /&gt;
      var current = &#039;&#039;;&lt;br /&gt;
      headings.forEach(function (h) {&lt;br /&gt;
        if (window.scrollY &amp;gt;= h.offsetTop - 100) current = h.id;&lt;br /&gt;
      });&lt;br /&gt;
      toc.querySelectorAll(&#039;a&#039;).forEach(function (a) {&lt;br /&gt;
        var active = a.href.includes(current) &amp;amp;&amp;amp; current !== &#039;&#039;;&lt;br /&gt;
        a.style.color = active ? &#039;#0288d1&#039; : &#039;&#039;;&lt;br /&gt;
        a.style.fontWeight = active ? &#039;900&#039; : &#039;&#039;;&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     12. RANDOM ARTICLE BUTTON on main page&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var heroEl = document.querySelector(&#039;.circus-hero&#039;);&lt;br /&gt;
  var isMainPage = document.title.toLowerCase().includes(&#039;main&#039;);&lt;br /&gt;
  if (heroEl &amp;amp;&amp;amp; isMainPage) {&lt;br /&gt;
    var randBtn = document.createElement(&#039;a&#039;);&lt;br /&gt;
    randBtn.href = &#039;/wiki/Special:Random&#039;;&lt;br /&gt;
    randBtn.textContent = &#039;🎲 Take me somewhere random!&#039;;&lt;br /&gt;
    randBtn.style.cssText = [&lt;br /&gt;
      &#039;display:inline-block&#039;,&#039;margin-top:10px&#039;,&lt;br /&gt;
      &#039;padding:10px 24px&#039;,&#039;border-radius:24px&#039;,&lt;br /&gt;
      &#039;background:#29b6f6&#039;,&#039;color:white!important&#039;,&lt;br /&gt;
      &#039;font-family:Nunito,sans-serif&#039;,&#039;font-weight:700&#039;,&lt;br /&gt;
      &#039;font-size:1em&#039;,&#039;text-decoration:none!important&#039;,&lt;br /&gt;
      &#039;transition:transform 0.2s&#039;&lt;br /&gt;
    ].join(&#039;;&#039;);&lt;br /&gt;
    randBtn.addEventListener(&#039;mouseenter&#039;, function () { randBtn.style.transform = &#039;scale(1.05)&#039;; });&lt;br /&gt;
    randBtn.addEventListener(&#039;mouseleave&#039;, function () { randBtn.style.transform = &#039;&#039;; });&lt;br /&gt;
    heroEl.appendChild(randBtn);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     13. COLOR-CODED CATEGORY TAGS&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var catPalette = [&lt;br /&gt;
    &#039;#29b6f6&#039;,&#039;#f06292&#039;,&#039;#ab47bc&#039;,&#039;#66bb6a&#039;,&lt;br /&gt;
    &#039;#ffa726&#039;,&#039;#ef5350&#039;,&#039;#26c6da&#039;,&#039;#d4e157&#039;&lt;br /&gt;
  ];&lt;br /&gt;
  document.querySelectorAll(&#039;#catlinks a&#039;).forEach(function (a) {&lt;br /&gt;
    var idx = a.textContent.charCodeAt(0) % catPalette.length;&lt;br /&gt;
    var c = catPalette[idx];&lt;br /&gt;
    a.style.cssText = [&lt;br /&gt;
      &#039;background:&#039; + c + &#039;22&#039;,&lt;br /&gt;
      &#039;color:&#039; + c,&lt;br /&gt;
      &#039;border:1.5px solid &#039; + c + &#039;66&#039;,&lt;br /&gt;
      &#039;border-radius:12px&#039;,&lt;br /&gt;
      &#039;padding:2px 10px&#039;,&lt;br /&gt;
      &#039;margin:2px&#039;,&lt;br /&gt;
      &#039;display:inline-block&#039;,&lt;br /&gt;
      &#039;font-weight:700&#039;,&lt;br /&gt;
      &#039;text-decoration:none!important&#039;&lt;br /&gt;
    ].join(&#039;;&#039;);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ----------------------------------------------------------&lt;br /&gt;
     14. LIVE SEARCH FILTER on category pages&lt;br /&gt;
     ---------------------------------------------------------- */&lt;br /&gt;
  var catSection = document.querySelector(&#039;.mw-category&#039;);&lt;br /&gt;
  if (catSection) {&lt;br /&gt;
    var filterInput = document.createElement(&#039;input&#039;);&lt;br /&gt;
    filterInput.placeholder = &#039;🔍 Filter pages...&#039;;&lt;br /&gt;
    filterInput.style.cssText = [&lt;br /&gt;
      &#039;display:block&#039;,&#039;margin:12px 0&#039;,&#039;padding:8px 16px&#039;,&lt;br /&gt;
      &#039;border:2px solid #b3e5fc&#039;,&#039;border-radius:20px&#039;,&lt;br /&gt;
      &#039;font-family:Nunito,sans-serif&#039;,&#039;font-size:1em&#039;,&#039;width:300px&#039;&lt;br /&gt;
    ].join(&#039;;&#039;);&lt;br /&gt;
    catSection.before(filterInput);&lt;br /&gt;
    filterInput.addEventListener(&#039;input&#039;, function () {&lt;br /&gt;
      var val = filterInput.value.toLowerCase();&lt;br /&gt;
      document.querySelectorAll(&#039;.mw-category li&#039;).forEach(function (li) {&lt;br /&gt;
        li.style.display = li.textContent.toLowerCase().includes(val) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=378</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=378"/>
		<updated>2026-04-10T00:07:04Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 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;hr /&gt;
&lt;div&gt;// Adds a search box that filters category members in real time&lt;br /&gt;
if (document.querySelector(&#039;.mw-category&#039;)) {&lt;br /&gt;
  const input = document.createElement(&#039;input&#039;);&lt;br /&gt;
  input.placeholder = &#039;Filter pages...&#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(&#039;.mw-category&#039;).before(input);&lt;br /&gt;
  input.addEventListener(&#039;input&#039;, () =&amp;gt; {&lt;br /&gt;
    document.querySelectorAll(&#039;.mw-category li&#039;).forEach(li =&amp;gt; {&lt;br /&gt;
      li.style.display = li.textContent.toLowerCase()&lt;br /&gt;
        .includes(input.value.toLowerCase()) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const btn = document.createElement(&#039;button&#039;);&lt;br /&gt;
btn.textContent = &#039;🎨 Switch Theme&#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(&#039;click&#039;, () =&amp;gt; {&lt;br /&gt;
  const current = localStorage.getItem(&#039;wikiTheme&#039;) || &#039;blue&#039;;&lt;br /&gt;
  const next = current === &#039;blue&#039; ? &#039;pink&#039; : &#039;blue&#039;;&lt;br /&gt;
  localStorage.setItem(&#039;wikiTheme&#039;, next);&lt;br /&gt;
  document.getElementById(&#039;wiki-theme-css&#039;).href =&lt;br /&gt;
    next === &#039;pink&#039; ? &#039;https://animalcookie.trumpetz.com/index.php/MediaWiki:Pink_Theme.css&#039; : &#039;https://animalcookie.trumpetz.com/index.php/MediaWiki:Common.css&#039;;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
document.addEventListener(&#039;mousemove&#039;, e =&amp;gt; {&lt;br /&gt;
  const spark = document.createElement(&#039;div&#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: ${[&#039;#29b6f6&#039;,&#039;#f06292&#039;,&#039;#f9c74f&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Pink_Theme.css&amp;diff=377</id>
		<title>MediaWiki:Pink Theme.css</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=MediaWiki:Pink_Theme.css&amp;diff=377"/>
		<updated>2026-04-10T00:05:54Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: Created page with &amp;quot;/* ============================================================    CIRCUS WIKI — MediaWiki:Common.css    Paste this entire file into Special:EditPage/MediaWiki:Common.css    ============================================================ */  /* --- Google Font Import --- */ @import url(&amp;#039;https://fonts.googleapis.com/css2?family=Nunito:wght@400;700;900&amp;amp;display=swap&amp;#039;);  /* --- Global Reset --- */ body, #content, #mw-content-text #mw-page-container {   background-color: #fdf5...&amp;quot;&lt;/p&gt;
&lt;hr /&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(&#039;https://fonts.googleapis.com/css2?family=Nunito:wght@400;700;900&amp;amp;display=swap&#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: &#039;Nunito&#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: &#039;&#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: &#039;&#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: &#039;Nunito&#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: &#039;&#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=&#039;http://www.w3.org/2000/svg&#039; viewBox=&#039;0 0 24 24&#039;%3E%3Cpath d=&#039;M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7&#039;/%3E%3Cpath d=&#039;M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z&#039;/%3E%3C/svg%3E&amp;quot;);&lt;br /&gt;
  mask-image: url(&amp;quot;data:image/svg+xml,%3Csvg xmlns=&#039;http://www.w3.org/2000/svg&#039; viewBox=&#039;0 0 24 24&#039;%3E%3Cpath d=&#039;M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7&#039;/%3E%3Cpath d=&#039;M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z&#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: &#039;Nunito&#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: &#039;Nunito&#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: &#039;Nunito&#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: &#039;Nunito&#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: &#039;Nunito&#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: &#039;Nunito&#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: &#039;Nunito&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Colors:Page_Creator&amp;diff=375</id>
		<title>Colors:Page Creator</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Colors:Page_Creator&amp;diff=375"/>
		<updated>2026-04-09T23:41:09Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Create Header|new}}&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleToyColor&amp;diff=373</id>
		<title>Colors:CreateArticleToyColor</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleToyColor&amp;diff=373"/>
		<updated>2026-04-09T23:41:09Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleScienceColor&amp;diff=371</id>
		<title>Colors:CreateArticleScienceColor</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleScienceColor&amp;diff=371"/>
		<updated>2026-04-09T23:41:08Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticlePlantColor&amp;diff=369</id>
		<title>Colors:CreateArticlePlantColor</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticlePlantColor&amp;diff=369"/>
		<updated>2026-04-09T23:41:08Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleOtherColors&amp;diff=367</id>
		<title>Colors:CreateArticleOtherColors</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleOtherColors&amp;diff=367"/>
		<updated>2026-04-09T23:41:08Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleMedicalColor&amp;diff=365</id>
		<title>Colors:CreateArticleMedicalColor</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleMedicalColor&amp;diff=365"/>
		<updated>2026-04-09T23:41:08Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleFoodColor&amp;diff=363</id>
		<title>Colors:CreateArticleFoodColor</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleFoodColor&amp;diff=363"/>
		<updated>2026-04-09T23:41:08Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleCosmicColor&amp;diff=361</id>
		<title>Colors:CreateArticleCosmicColor</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleCosmicColor&amp;diff=361"/>
		<updated>2026-04-09T23:41:08Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleCharacterColor&amp;diff=359</id>
		<title>Colors:CreateArticleCharacterColor</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleCharacterColor&amp;diff=359"/>
		<updated>2026-04-09T23:41:08Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleBasicColor&amp;diff=357</id>
		<title>Colors:CreateArticleBasicColor</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleBasicColor&amp;diff=357"/>
		<updated>2026-04-09T23:41:08Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleAnimalColor&amp;diff=355</id>
		<title>Colors:CreateArticleAnimalColor</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Colors:CreateArticleAnimalColor&amp;diff=355"/>
		<updated>2026-04-09T23:41:08Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Navbar/styles.css&amp;diff=352</id>
		<title>Module:Navbar/styles.css</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Navbar/styles.css&amp;diff=352"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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: &#039;[ &#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-brackets::after {&lt;br /&gt;
	margin-left: -0.125em;&lt;br /&gt;
	content: &#039; ]&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:NavboxBuilder&amp;diff=350</id>
		<title>Module:NavboxBuilder</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:NavboxBuilder&amp;diff=350"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return require(&#039;Dev:NavboxBuilder&#039;)&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Namespace_detect/config&amp;diff=348</id>
		<title>Module:Namespace detect/config</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Namespace_detect/config&amp;diff=348"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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&#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&#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 = &#039;parameter name&#039;                                                 --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- To add multiple names, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- cfg.foo = {&#039;parameter name 1&#039;, &#039;parameter name 2&#039;, &#039;parameter name 3&#039;}     --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
---- This parameter displays content for the main namespace:&lt;br /&gt;
-- cfg.main = &#039;main&#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter displays in talk namespaces:&lt;br /&gt;
-- cfg.talk = &#039;talk&#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 = &#039;other&#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 = &#039;subjectns&#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter sets a demonstration namespace:&lt;br /&gt;
-- cfg.demospace = &#039;demospace&#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter sets a specific page to compare:&lt;br /&gt;
cfg.demopage = &#039;page&#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 = &#039;Namespace&#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 = &#039;Aliases&#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&#039;t edit this line.&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Namespace_detect/data&amp;diff=346</id>
		<title>Module:Namespace detect/data</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Namespace_detect/data&amp;diff=346"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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(&#039;Module:Namespace detect/config&#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;
	&#039;main&#039;,&lt;br /&gt;
	&#039;talk&#039;,&lt;br /&gt;
	&#039;other&#039;,&lt;br /&gt;
	&#039;subjectns&#039;,&lt;br /&gt;
	&#039;demospace&#039;,&lt;br /&gt;
	&#039;demopage&#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 == &#039;string&#039; then&lt;br /&gt;
		addKey(t, cfgValue, defaultKey)&lt;br /&gt;
	elseif cfgValueType == &#039;table&#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&#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;
	--   [&#039;&#039;] = {&#039;main&#039;},&lt;br /&gt;
	--   [&#039;wikipedia&#039;] = {&#039;wikipedia&#039;, &#039;project&#039;, &#039;wp&#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[&#039;talk&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Namespace_detect&amp;diff=344</id>
		<title>Module:Namespace detect</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Namespace_detect&amp;diff=344"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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(&#039;Module:Namespace detect/data&#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(&#039;Module:Yesno&#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 == &#039;&#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 == &#039;&#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 = &#039;talk&#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&#039;t exist.&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	ret = ret:gsub(&#039;_&#039;, &#039; &#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 &#039;other&#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(&#039;Module:Arguments&#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 &#039;&#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(&#039;Module:TableTools&#039;)&lt;br /&gt;
	local namespaces = mw.site.namespaces&lt;br /&gt;
	local cfg = data.cfg&lt;br /&gt;
	local useTalk = type(frame) == &#039;table&#039; &lt;br /&gt;
		and type(frame.args) == &#039;table&#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) == &#039;string&#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, &#039;Namespace&#039;)&lt;br /&gt;
	local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, &#039;Aliases&#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 ~= &#039;talk&#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 = &#039;{| class=&amp;quot;wikitable&amp;quot;&#039;&lt;br /&gt;
		.. &#039;\n|-&#039;&lt;br /&gt;
		.. &#039;\n! &#039; .. nsHeader&lt;br /&gt;
		.. &#039;\n! &#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 .. &#039;\n|-&#039;&lt;br /&gt;
					.. &#039;\n| &amp;lt;code&amp;gt;&#039; .. param .. &#039;&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
					.. &#039;\n| &#039;&lt;br /&gt;
			elseif j == 2 then&lt;br /&gt;
				ret = ret .. &#039;&amp;lt;code&amp;gt;&#039; .. param .. &#039;&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
			else&lt;br /&gt;
				ret = ret .. &#039;, &amp;lt;code&amp;gt;&#039; .. param .. &#039;&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	ret = ret .. &#039;\n|-&#039;&lt;br /&gt;
		.. &#039;\n|}&#039;&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Navbar/configuration&amp;diff=342</id>
		<title>Module:Navbar/configuration</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Navbar/configuration&amp;diff=342"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	[&#039;templatestyles&#039;] = &#039;Module:Navbar/styles.css&#039;,&lt;br /&gt;
	[&#039;hlist_templatestyles&#039;] = &#039;Hlist/styles.css&#039;,&lt;br /&gt;
	[&#039;box_text&#039;] = &#039;This box: &#039;,			-- default text box when not plain or mini&lt;br /&gt;
	[&#039;title_namespace&#039;] = &#039;Template&#039;,		-- namespace to default to for title&lt;br /&gt;
	[&#039;invalid_title&#039;] = &#039;Invalid title &#039;,&lt;br /&gt;
	[&#039;classes&#039;] = { -- set a line to nil if you don&#039;t want it&lt;br /&gt;
		[&#039;navbar&#039;] = &#039;navbar&#039;,&lt;br /&gt;
		[&#039;plainlinks&#039;] = &#039;plainlinks&#039;, -- plainlinks&lt;br /&gt;
		[&#039;horizontal_list&#039;] = &#039;hlist&#039;, -- horizontal list class&lt;br /&gt;
		[&#039;mini&#039;] = &#039;navbar-mini&#039;, -- class indicating small links in the navbar&lt;br /&gt;
		[&#039;this_box&#039;] = &#039;navbar-boxtext&#039;,&lt;br /&gt;
		[&#039;brackets&#039;] = &#039;navbar-brackets&#039;,&lt;br /&gt;
		-- &#039;collapsible&#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;
		[&#039;collapsible&#039;] = &#039;navbar-collapse&#039;,&lt;br /&gt;
		[&#039;collapsible_title_mini&#039;] = &#039;navbar-ct-mini&#039;,&lt;br /&gt;
		[&#039;collapsible_title_full&#039;] = &#039;navbar-ct-full&#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Formatted_appearance&amp;diff=340</id>
		<title>Module:Formatted appearance</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Formatted_appearance&amp;diff=340"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;&#039;&#039;&amp;quot; .. title .. &amp;quot;&#039;&#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[&#039;major_work&#039;]															-- Get the title of the major work.&lt;br /&gt;
	local appearanceMinor = args[&#039;minor_work&#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[&#039;issue&#039;] ~= nil) then																		-- Check if the comic specific issue is not nil.					&lt;br /&gt;
		appearanceMinor = args[&#039;issue&#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[&#039;date&#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(&#039;Module:Arguments&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:List&amp;diff=338</id>
		<title>Module:List</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:List&amp;diff=338"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local libUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
local checkType = libUtil.checkType&lt;br /&gt;
local mTableTools = require(&#039;Module:TableTools&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local listTypes = {&lt;br /&gt;
	[&#039;bulleted&#039;] = true,&lt;br /&gt;
	[&#039;unbulleted&#039;] = true,&lt;br /&gt;
	[&#039;horizontal&#039;] = true,&lt;br /&gt;
	[&#039;ordered&#039;] = true,&lt;br /&gt;
	[&#039;horizontal_ordered&#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 = &#039;&#039;&lt;br /&gt;
	if listType == &#039;horizontal&#039; or listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		table.insert(data.classes, &#039;hlist&#039;)&lt;br /&gt;
		data.templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = &#039;Hlist/styles.css&#039; }&lt;br /&gt;
		}&lt;br /&gt;
	elseif listType == &#039;unbulleted&#039; then&lt;br /&gt;
		table.insert(data.classes, &#039;plainlist&#039;)&lt;br /&gt;
		data.templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = &#039;Plainlist/styles.css&#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 == &#039;horizontal&#039; or listType == &#039;horizontal_ordered&#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 .. &#039;em&#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 == &#039;ordered&#039; or listType == &#039;horizontal_ordered&#039; then &lt;br /&gt;
		data.listStyleType = args.list_style_type or args[&#039;list-style-type&#039;]&lt;br /&gt;
		data.type = args[&#039;type&#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(&#039;^%s*[1AaIi]%s*$&#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 == &#039;ordered&#039; or listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		data.listTag = &#039;ol&#039;&lt;br /&gt;
	else&lt;br /&gt;
		data.listTag = &#039;ul&#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 == &#039;horizontal_ordered&#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 = &#039;listitem &#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[&#039;item&#039; .. tostring(num) .. &#039;_style&#039;]&lt;br /&gt;
			or args[&#039;item_style&#039; .. tostring(num)]&lt;br /&gt;
		item.value = args[&#039;item&#039; .. tostring(num) .. &#039;_value&#039;]&lt;br /&gt;
			or args[&#039;item_value&#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) ~= &#039;table&#039; or #data.items &amp;lt; 1 then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Render the main div tag.&lt;br /&gt;
	local root = mw.html.create(&#039;div&#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{[&#039;margin-left&#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 &#039;ul&#039;)&lt;br /&gt;
	list&lt;br /&gt;
		:attr{start = data.start, type = data.type}&lt;br /&gt;
		:css{&lt;br /&gt;
			[&#039;counter-reset&#039;] = data.counterReset,&lt;br /&gt;
			[&#039;list-style-type&#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(&#039;li&#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(&#039;^item_style%d+$&#039;) or k:find(&#039;^item_value%d+$&#039;) then&lt;br /&gt;
			isDeprecated = true&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local ret = &#039;&#039;&lt;br /&gt;
	if isDeprecated then&lt;br /&gt;
		ret = ret .. &#039;[[Category:List templates with deprecated parameters]]&#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 &#039;makeList&#039; (&#039;%s&#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(&#039;makeList&#039;, 2, args, &#039;table&#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(&#039;Module:Arguments&#039;)&lt;br /&gt;
		local origArgs = mArguments.getArgs(frame, {&lt;br /&gt;
			frameOnly = ((frame and frame.args and frame.args.frameonly or &#039;&#039;) ~= &#039;&#039;),&lt;br /&gt;
			valueFunc = function (key, value)&lt;br /&gt;
			if not value or not mw.ustring.find(value, &#039;%S&#039;) then return nil end&lt;br /&gt;
			if mw.ustring.find(value, &#039;^%s*[%*#;:]&#039;) then&lt;br /&gt;
				return value&lt;br /&gt;
			else&lt;br /&gt;
				return value:match(&#039;^%s*(.-)%s*$&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Navpills&amp;diff=336</id>
		<title>Module:Navpills</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Navpills&amp;diff=336"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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 &#039;data&#039;, and&lt;br /&gt;
-- &#039;data1&#039;, &#039;data2&#039;, and &#039;data5&#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(&#039;^&#039; .. prefix .. &#039;([1-9]%d*)$&#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( &#039;Module:Arguments&#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 &#039;Missing arguments&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local html = mw.html.create( &#039;div&#039; ):addClass( &#039;template-navpills&#039; ):attr( &#039;role&#039;, &#039;navigation&#039; )&lt;br /&gt;
	&lt;br /&gt;
	for i, _ in ipairs( getArgNums( &#039;page&#039;, args ) ) do&lt;br /&gt;
		if not args[ &#039;page&#039; .. i ] then return end&lt;br /&gt;
		local num = tostring( i )&lt;br /&gt;
		local navpill = mw.html.create(&#039;div&#039;):addClass(&#039;template-navpill&#039;)&lt;br /&gt;
&lt;br /&gt;
		if args[ &#039;image&#039; .. i ] then&lt;br /&gt;
			navpill:tag(&#039;div&#039;):addClass(&#039;template-navpill-background&#039;)&lt;br /&gt;
				:wikitext( string.format( &#039;[[File:%s|x48px|link=]]&#039;, args[ &#039;image&#039; .. num ] ) )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		navpill:wikitext( string.format( &#039;[[%s|%s]]&#039;, args[ &#039;page&#039; .. num ], args[ &#039;text&#039; .. num ] or args[ &#039;page&#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 = &#039;templatestyles&#039;, args = { src = &#039;Module:Navpills/styles.css&#039; }&lt;br /&gt;
	} .. tostring( html )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Navbox/styles.css&amp;diff=334</id>
		<title>Module:Navbox/styles.css</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Navbox/styles.css&amp;diff=334"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Navbox/configuration&amp;diff=332</id>
		<title>Module:Navbox/configuration</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Navbox/configuration&amp;diff=332"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	aria_label = &#039;Navbox&#039;,&lt;br /&gt;
	nowrap_item = &#039;%s&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
	templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
		name = &#039;templatestyles&#039;, args = { src = &#039;Module:Navbox/styles.css&#039; }&lt;br /&gt;
	},&lt;br /&gt;
	hlist_templatestyles = &#039;Hlist/styles.css&#039;,&lt;br /&gt;
	plainlist_templatestyles = &#039;Plainlist/styles.css&#039;,&lt;br /&gt;
	-- do not localize marker table&lt;br /&gt;
	marker = {&lt;br /&gt;
		oddeven = &#039;\127_ODDEVEN_\127&#039;,&lt;br /&gt;
		restart = &#039;\127_ODDEVEN0_\127&#039;,&lt;br /&gt;
		regex = &#039;\127_ODDEVEN(%d?)_\127&#039;&lt;br /&gt;
	},&lt;br /&gt;
	category = {&lt;br /&gt;
		orphan = &#039;[[Category:Navbox orphans]]&#039;,&lt;br /&gt;
		horizontal_lists = &#039;Navigational boxes without horizontal lists&#039;,&lt;br /&gt;
		background_colors = &#039;Navboxes using background colours&#039;,&lt;br /&gt;
		illegible = &#039;Potentially illegible navboxes&#039;,&lt;br /&gt;
		borders = &#039;Navboxes using borders&#039;,&lt;br /&gt;
		without_first_col = &#039;[[Category:Pages using navbox columns without the first column]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	keyword = {&lt;br /&gt;
		border_subgroup = &#039;subgroup&#039;,&lt;br /&gt;
		border_child = &#039;child&#039;,&lt;br /&gt;
		border_none = &#039;none&#039;,&lt;br /&gt;
		evenodd_swap = &#039;swap&#039;,&lt;br /&gt;
		navbar_off = &#039;off&#039;,&lt;br /&gt;
		navbar_plain = &#039;plain&#039;,&lt;br /&gt;
		nocat_false = &#039;false&#039;,&lt;br /&gt;
		nowrapitems_yes = &#039;yes&#039;,&lt;br /&gt;
		orphan_yes = &#039;yes&#039;,&lt;br /&gt;
		state_collapsed = &#039;collapsed&#039;,&lt;br /&gt;
		state_off = &#039;off&#039;,&lt;br /&gt;
		state_plain = &#039;plain&#039;,&lt;br /&gt;
		state_uncollapsed = &#039;uncollapsed&#039;,&lt;br /&gt;
		subgroups = {&#039;subgroup&#039;, &#039;child&#039;, &#039;&#039;},&lt;br /&gt;
		subpage_doc = &#039;doc&#039;,&lt;br /&gt;
		subpage_sandbox = &#039;sandbox&#039;,&lt;br /&gt;
		subpage_testcases = &#039;testcases&#039;,&lt;br /&gt;
		tracking_no = &#039;no&#039;,&lt;br /&gt;
		with_collapsible_groups = &#039;with collapsible groups&#039;,&lt;br /&gt;
		with_columns = &#039;with columns&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	class = {&lt;br /&gt;
		autocollapse = &#039;autocollapse&#039;,&lt;br /&gt;
		collapsible = &#039;mw-collapsible&#039;,&lt;br /&gt;
		collapsed = &#039;mw-collapsed&#039;,&lt;br /&gt;
		-- Warning&lt;br /&gt;
		navbox = &#039;navbox&#039;, -- WMF currently hides &#039;navbox&#039; from mobile,&lt;br /&gt;
		-- so you probably shouldn&#039;t change the navbox class.&lt;br /&gt;
		navbox_abovebelow = &#039;navbox-abovebelow&#039;,&lt;br /&gt;
		navbox_group = &#039;navbox-group&#039;,&lt;br /&gt;
		navbox_image = &#039;navbox-image&#039;,&lt;br /&gt;
		navbox_inner = &#039;navbox-inner&#039;,&lt;br /&gt;
		navbox_list = &#039;navbox-list&#039;,&lt;br /&gt;
		navbox_list_with_group = &#039;navbox-list-with-group&#039;,&lt;br /&gt;
		navbox_part = &#039;navbox-&#039;, -- do not l10n&lt;br /&gt;
		navbox_styles = &#039;navbox-styles&#039;,&lt;br /&gt;
		navbox_subgroup = &#039;navbox-subgroup&#039;,&lt;br /&gt;
		navbox_title = &#039;navbox-title&#039;, -- l10n only if you change pattern.navbox_title below&lt;br /&gt;
		navbox_odd_part = &#039;odd&#039;, -- do not l10n&lt;br /&gt;
		navbox_even_part = &#039;even&#039;, -- do not l10n&lt;br /&gt;
		nomobile = &#039;nomobile&#039;,&lt;br /&gt;
		nowraplinks = &#039;nowraplinks&#039;,&lt;br /&gt;
		noviewer = &#039;noviewer&#039;, -- used to remove images from MediaViewer&lt;br /&gt;
		notheme = &#039;notheme&#039;&lt;br /&gt;
	},&lt;br /&gt;
	pattern = {&lt;br /&gt;
		class = &#039;class&#039;,&lt;br /&gt;
		colnum = &#039;^col(%d+)$&#039;,&lt;br /&gt;
		colheadernum = &#039;^col(%d+)header$&#039;,&lt;br /&gt;
		colfooternum = &#039;^col(%d+)footer$&#039;,&lt;br /&gt;
		contentnum = &#039;^content(%d+)$&#039;,&lt;br /&gt;
		groupnum = &#039;^group(%d+)$&#039;,&lt;br /&gt;
		hlist = &#039;hlist&#039;,&lt;br /&gt;
		listnum = &#039;^list(%d+)$&#039;,&lt;br /&gt;
		navbox = &#039;Template:Navbox&#039;,&lt;br /&gt;
		navbox_title = &#039;&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;&#039;,&lt;br /&gt;
		nowrap = &#039;^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
		num = &#039;^%a+(%d+)$&#039;,&lt;br /&gt;
		plainlist = &#039;plainlist&#039;,&lt;br /&gt;
		sandbox = &#039;/sandbox$&#039;,&lt;br /&gt;
		sectionnum = &#039;^section(%d+)$&#039;,&lt;br /&gt;
		sectnum = &#039;^sect(%d+)$&#039;,&lt;br /&gt;
		style = &#039;style$&#039;,&lt;br /&gt;
		with_collapsible_groups = &#039;Template:Navbox with collapsible groups&#039;,&lt;br /&gt;
		with_columns = &#039;Template:Navbox with columns&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	arg = {&lt;br /&gt;
		abbr_and_num = &#039;abbr%d&#039;,&lt;br /&gt;
		above = &#039;above&#039;,&lt;br /&gt;
		aboveclass = &#039;aboveclass&#039;,&lt;br /&gt;
		abovestyle = &#039;abovestyle&#039;,&lt;br /&gt;
		basestyle = &#039;basestyle&#039;,&lt;br /&gt;
		below = &#039;below&#039;,&lt;br /&gt;
		belowclass = &#039;belowclass&#039;,&lt;br /&gt;
		belowstyle = &#039;belowstyle&#039;,&lt;br /&gt;
		bodyclass = &#039;bodyclass&#039;,&lt;br /&gt;
		bodystyle = &#039;bodystyle&#039;,&lt;br /&gt;
		border = &#039;border&#039;,&lt;br /&gt;
		content_and_num = &#039;content%d&#039;,&lt;br /&gt;
		contentstyle = &#039;contentstyle&#039;,&lt;br /&gt;
		contentstyle_and_num = &#039;content%dstyle&#039;,&lt;br /&gt;
		colheaderstyle = &#039;colheaderstyle&#039;,&lt;br /&gt;
		colheader_and_num = &#039;col%dheader&#039;,&lt;br /&gt;
		colheaderstyle_and_num = &#039;col%dheaderstyle&#039;,&lt;br /&gt;
		colheadercolspan_and_num = &#039;col%dheadercolspan&#039;,&lt;br /&gt;
		colstyle = &#039;colstyle&#039;,&lt;br /&gt;
		col_and_num = &#039;col%d&#039;,&lt;br /&gt;
		colstyle_and_num = &#039;col%dstyle&#039;,&lt;br /&gt;
		colwidth = &#039;colwidth&#039;,&lt;br /&gt;
		colwidth_and_num = &#039;col%dwidth&#039;,&lt;br /&gt;
		colfooterstyle = &#039;colfooterstyle&#039;,&lt;br /&gt;
		colfooter_and_num = &#039;col%dfooter&#039;,&lt;br /&gt;
		colfooterstyle_and_num = &#039;col%dfooterstyle&#039;,&lt;br /&gt;
		colfootercolspan_and_num = &#039;col%dfootercolspan&#039;,&lt;br /&gt;
		coltablestyle = &#039;coltablestyle&#039;,&lt;br /&gt;
		evencolstyle = &#039;evencolstyle&#039;,&lt;br /&gt;
		evenodd = &#039;evenodd&#039;,&lt;br /&gt;
		evenstyle = &#039;evenstyle&#039;,&lt;br /&gt;
		fullwidth = &#039;fullwidth&#039;,&lt;br /&gt;
		group1 = &#039;group1&#039;,&lt;br /&gt;
		group2 = &#039;group2&#039;,&lt;br /&gt;
		group_and_num = &#039;group%d&#039;,&lt;br /&gt;
		groupclass = &#039;groupclass&#039;,&lt;br /&gt;
		groupstyle = &#039;groupstyle&#039;,&lt;br /&gt;
		groupstyle_and_num = &#039;group%dstyle&#039;,&lt;br /&gt;
		groupwidth = &#039;groupwidth&#039;,&lt;br /&gt;
		image = &#039;image&#039;,&lt;br /&gt;
		image_and_num = &#039;image%d&#039;,&lt;br /&gt;
		imageclass = &#039;imageclass&#039;,&lt;br /&gt;
		imageleft = &#039;imageleft&#039;,&lt;br /&gt;
		imageleft_and_num = &#039;imageleft%d&#039;,&lt;br /&gt;
		imageleftstyle = &#039;imageleftstyle&#039;,&lt;br /&gt;
		imagestyle = &#039;imagestyle&#039;,&lt;br /&gt;
		innerstyle = &#039;innerstyle&#039;,&lt;br /&gt;
		list1padding = &#039;list1padding&#039;,&lt;br /&gt;
		list_and_num = &#039;list%d&#039;,&lt;br /&gt;
		listclass = &#039;listclass&#039;,&lt;br /&gt;
		listclass_and_num = &#039;list%dclass&#039;,&lt;br /&gt;
		listpadding = &#039;listpadding&#039;,&lt;br /&gt;
		liststyle = &#039;liststyle&#039;,&lt;br /&gt;
		liststyle_and_num = &#039;list%dstyle&#039;,&lt;br /&gt;
		name = &#039;name&#039;,&lt;br /&gt;
		navbar = &#039;navbar&#039;,&lt;br /&gt;
		navboxclass = &#039;navboxclass&#039;,&lt;br /&gt;
		nocat = &#039;nocat&#039;,&lt;br /&gt;
		nowrapitems = &#039;nowrapitems&#039;,&lt;br /&gt;
		oddcolstyle = &#039;oddcolstyle&#039;,&lt;br /&gt;
		oddstyle = &#039;oddstyle&#039;,&lt;br /&gt;
		orphan = &#039;orphan&#039;,&lt;br /&gt;
		padding = &#039;padding&#039;,&lt;br /&gt;
		sect_and_num = &#039;sect%d&#039;,&lt;br /&gt;
		section_and_num = &#039;section%d&#039;,&lt;br /&gt;
		sectiontitlestyle_and_num = &#039;section%dtitlestyle&#039;,&lt;br /&gt;
		secttitlestyle = &#039;secttitlestyle&#039;,&lt;br /&gt;
		selected = &#039;selected&#039;,&lt;br /&gt;
		state = &#039;state&#039;,&lt;br /&gt;
		state_and_num = &#039;state%d&#039;,&lt;br /&gt;
		style = &#039;style&#039;,&lt;br /&gt;
		subgroups_and_num = {&#039;subgroup%d&#039;, &#039;child%d&#039;, &#039;%d&#039;},&lt;br /&gt;
		templatestyles = &#039;templatestyles&#039;,&lt;br /&gt;
		child_templatestyles = &#039;child templatestyles&#039;,&lt;br /&gt;
		title = &#039;title&#039;,&lt;br /&gt;
		titleclass = &#039;titleclass&#039;,&lt;br /&gt;
		titlestyle = &#039;titlestyle&#039;,&lt;br /&gt;
		tracking = &#039;tracking&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	-- names of navbar arguments&lt;br /&gt;
	navbar = {&lt;br /&gt;
		name = 1,&lt;br /&gt;
		fontstyle = &#039;fontstyle&#039;,&lt;br /&gt;
		mini = &#039;mini&#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Navbox&amp;diff=330</id>
		<title>Module:Navbox</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Navbox&amp;diff=330"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;strict&#039;)&lt;br /&gt;
local p = {}&lt;br /&gt;
local cfg = mw.loadData(&#039;Module:Navbox/configuration&#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 .. &#039;_and_num&#039;], n) end&lt;br /&gt;
local isblank = function(v) return (v or &#039;&#039;) == &#039;&#039; end&lt;br /&gt;
&lt;br /&gt;
local function concatstrings(s)&lt;br /&gt;
	local r = table.concat(s, &#039;&#039;)&lt;br /&gt;
	if r:match(&#039;^%s*$&#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 = &#039;&#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 .. &#039;;&#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 == &#039;0&#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(&#039;([%[%]])&#039;, &#039;%%%1&#039;)&lt;br /&gt;
		return (wikitext:gsub(regex, &#039;&#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) == &#039;{|&#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 &#039;\n&#039; .. item .. &#039;\n&#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 .. &#039;\n&#039;):gmatch(&#039;([^\n]*)\n&#039;) do&lt;br /&gt;
				local prefix, content = line:match(&#039;^([*:;#]+)%s*(.*)&#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, &#039;\n&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if item:match(&#039;^[*:;#]&#039;) then&lt;br /&gt;
			return &#039;\n&#039; .. item .. &#039;\n&#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, &#039;&#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(&#039;;&#039; .. css_str .. &#039;;&#039;, &#039;.*;%s*([Cc][Oo][Ll][Oo][Rr]%s*:%s*.-)%s*;&#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(&#039;Module:Navbar&#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 &#039;&#039;) .. &#039;;&#039; .. (args[cfg.arg.titlestyle] or &#039;&#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(&#039;tr&#039;)&lt;br /&gt;
&lt;br /&gt;
		local titleCell = titleRow:tag(&#039;th&#039;):attr(&#039;scope&#039;, &#039;col&#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(&#039;colspan&#039;, titleColspan)&lt;br /&gt;
&lt;br /&gt;
		renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
		titleCell&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				-- id for aria-labelledby attribute&lt;br /&gt;
				:attr(&#039;id&#039;, mw.uri.anchorEncode(args[cfg.arg.title]) .. args.argHash)&lt;br /&gt;
				:addClass(args[cfg.arg.titleclass])&lt;br /&gt;
				:css(&#039;font-size&#039;, &#039;114%&#039;)&lt;br /&gt;
				:css(&#039;margin&#039;, &#039;0 4em&#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(&#039;tr&#039;)&lt;br /&gt;
			:tag(&#039;td&#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(&#039;colspan&#039;, getAboveBelowColspan())&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					-- id for aria-labelledby attribute, if no title&lt;br /&gt;
					:attr(&#039;id&#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(&#039;tr&#039;)&lt;br /&gt;
			:tag(&#039;td&#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(&#039;colspan&#039;, getAboveBelowColspan())&lt;br /&gt;
				:tag(&#039;div&#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(&#039;tr&#039;)&lt;br /&gt;
&lt;br /&gt;
		if index == 1 and args[cfg.arg.imageleft] then&lt;br /&gt;
			row&lt;br /&gt;
				:tag(&#039;td&#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(&#039;width&#039;, &#039;1px&#039;)               -- Minimize width&lt;br /&gt;
					:css(&#039;padding&#039;, &#039;0 2px 0 0&#039;)&lt;br /&gt;
					:cssText(args[cfg.arg.imageleftstyle])&lt;br /&gt;
					:attr(&#039;rowspan&#039;, listnums_size)&lt;br /&gt;
					:tag(&#039;div&#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(&#039;group&#039;, listnum)&lt;br /&gt;
		local groupstyle_and_num = andnum(&#039;groupstyle&#039;, listnum)&lt;br /&gt;
		if args[group_and_num] then&lt;br /&gt;
			local groupCell = row:tag(&#039;th&#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(&#039;id&#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(&#039;scope&#039;, &#039;row&#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(&#039;width&#039;, args[cfg.arg.groupwidth] or &#039;1%&#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(&#039;td&#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(&#039;colspan&#039;, 2)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not args[cfg.arg.groupwidth] then&lt;br /&gt;
			listCell:css(&#039;width&#039;, &#039;100%&#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(&#039;list&#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) == &#039;&amp;lt;/div&amp;gt;&amp;lt;table&#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(&#039;liststyle&#039;, listnum)&lt;br /&gt;
		local listclass_and_num = andnum(&#039;listclass&#039;, listnum)&lt;br /&gt;
		listCell&lt;br /&gt;
			:css(&#039;padding&#039;, &#039;0&#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(&#039;div&#039;)&lt;br /&gt;
				:css(&#039;padding&#039;,&lt;br /&gt;
					(index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or &#039;0 0.25em&#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(&#039;td&#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(&#039;width&#039;, &#039;1px&#039;)               -- Minimize width&lt;br /&gt;
					:css(&#039;padding&#039;, &#039;0 0 0 2px&#039;)&lt;br /&gt;
					:cssText(args[cfg.arg.imagestyle])&lt;br /&gt;
					:attr(&#039;rowspan&#039;, listnums_size)&lt;br /&gt;
					:tag(&#039;div&#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;
			&#039;^&#039; .. htmlclass .. &#039;$&#039;,&lt;br /&gt;
			&#039;%s&#039; .. htmlclass .. &#039;$&#039;,&lt;br /&gt;
			&#039;^&#039; .. htmlclass .. &#039;%s&#039;,&lt;br /&gt;
			&#039;%s&#039; .. htmlclass .. &#039;%s&#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		for arg, _ in pairs(args) do&lt;br /&gt;
			if type(arg) == &#039;string&#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 &#039;&#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 = &#039;templatestyles&#039;, args = { src = templatestyles }&lt;br /&gt;
				}&lt;br /&gt;
			else&lt;br /&gt;
				return &#039;&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local hlist_styles = add_list_templatestyles(&#039;hlist&#039;, cfg.hlist_templatestyles)&lt;br /&gt;
		local plainlist_styles = add_list_templatestyles(&#039;plainlist&#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 == &#039;&#039; then&lt;br /&gt;
			hlist_styles = frame:extensionTag{&lt;br /&gt;
				name = &#039;templatestyles&#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(&#039;background&#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(&#039;border&#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(&#039;Module:Color contrast&#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(&#039;[[Category:&#039; .. cat .. &#039;]]&#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(&#039;table&#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(&#039;border-spacing&#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(&#039;background&#039;, &#039;transparent&#039;)&lt;br /&gt;
				:css(&#039;color&#039;, &#039;inherit&#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&#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 = &#039;templatestyles&#039;, args = { src = templatestyles }&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
			return &#039;&#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 &#039;navbox-styles&#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(&#039;div&#039;)&lt;br /&gt;
			:addClass(cfg.class.navbox_styles)&lt;br /&gt;
			:wikitext(&lt;br /&gt;
				add_list_styles() .. -- see [hlist_note] applied to &#039;before base_templatestyles&#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 = &#039;(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)&#039;&lt;br /&gt;
	local argHash = 0&lt;br /&gt;
	for k, arg in pairs(args) do&lt;br /&gt;
		if type(arg) == &#039;string&#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, &#039;&#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) == &#039;string&#039; then&lt;br /&gt;
			local listnum = k:match(cfg.pattern.listnum)&lt;br /&gt;
			if listnum and args[andnum(&#039;list&#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 &#039;&#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(&#039;div&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;navigation&#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;
				&#039;aria-labelledby&#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(&#039;aria-label&#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&#039;s &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext(&#039;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext(&#039;&amp;lt;div&amp;gt;&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		res:node(add_navbox_styles(hiding_templatestyles))&lt;br /&gt;
		local nav = res:tag(&#039;div&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;navigation&#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(&#039;padding&#039;, &#039;3px&#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;
				&#039;aria-labelledby&#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(&#039;aria-label&#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) == &#039;string&#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(&#039;list&#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(&#039;group&#039;, n)] == nil&lt;br /&gt;
						and pargs[andnum(&#039;sect&#039;, n)] == nil&lt;br /&gt;
						and pargs[andnum(&#039;section&#039;, n)] == nil) then&lt;br /&gt;
					targs[list_and_num] = concatstrings({&lt;br /&gt;
						pargs[list_and_num] or &#039;&#039;,&lt;br /&gt;
						pargs[andnum(&#039;content&#039;, n)] or &#039;&#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 &#039;&#039;,&lt;br /&gt;
						pargs[cfg.arg.secttitlestyle] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;groupstyle&#039;, n)] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;sectiontitlestyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					local liststyle = concatstyles({&lt;br /&gt;
						pargs[cfg.arg.liststyle] or &#039;&#039;,&lt;br /&gt;
						pargs[cfg.arg.contentstyle] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;liststyle&#039;, n)] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;contentstyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					local title = concatstrings({&lt;br /&gt;
						pargs[andnum(&#039;group&#039;, n)] or &#039;&#039;,&lt;br /&gt;
						pargs[andnum(&#039;sect&#039;, n)] or &#039;&#039;,&lt;br /&gt;
						pargs[andnum(&#039;section&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					local list = concatstrings({&lt;br /&gt;
						pargs[list_and_num] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;content&#039;, n)] or &#039;&#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(&#039;abbr&#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(&#039;state&#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(&#039;list&#039;, 1)] = list,&lt;br /&gt;
						[cfg.arg.liststyle] = liststyle,&lt;br /&gt;
						[cfg.arg.listclass] = pargs[andnum(&#039;listclass&#039;, n)],&lt;br /&gt;
						[cfg.arg.image] = pargs[andnum(&#039;image&#039;, n)],&lt;br /&gt;
						[cfg.arg.imageleft] = pargs[andnum(&#039;imageleft&#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 &#039;&#039;, targs[cfg.arg.bodystyle] or &#039;&#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) == &#039;string&#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(&#039;liststyle&#039;, n + 2)] = pargs[andnum(&#039;liststyle&#039;, n)]&lt;br /&gt;
				targs[andnum(&#039;group&#039;, n + 2)] = pargs[andnum(&#039;group&#039;, n)]&lt;br /&gt;
				targs[andnum(&#039;groupstyle&#039;, n + 2)] = pargs[andnum(&#039;groupstyle&#039;, n)]&lt;br /&gt;
				if v and inArray(cfg.keyword.subgroups, v) then&lt;br /&gt;
					targs[andnum(&#039;list&#039;, n + 2)] = getSubgroup(pargs, n, v)&lt;br /&gt;
				else&lt;br /&gt;
					targs[andnum(&#039;list&#039;, n + 2)] = v&lt;br /&gt;
				end&lt;br /&gt;
			elseif (k:match(cfg.pattern.colheadernum) and v ~= &#039;&#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 ~= &#039;&#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 ~= &#039;&#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( &#039;table&#039; ):addClass(&#039;navbox-columns-table&#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 &#039;width:100%&#039;&lt;br /&gt;
		or &#039;width:auto; margin-left:auto; margin-right:auto&#039;&lt;br /&gt;
&lt;br /&gt;
	coltable:cssText(concatstyles({&lt;br /&gt;
		&#039;border-spacing: 0px; text-align:left&#039;,&lt;br /&gt;
		tablestyle,&lt;br /&gt;
		pargs[cfg.arg.coltablestyle] or &#039;&#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(&#039;tr&#039;)&lt;br /&gt;
		for k, n in ipairs(colheadernums) do&lt;br /&gt;
			col = row:tag(&#039;td&#039;):addClass(&#039;navbox-abovebelow&#039;)&lt;br /&gt;
			col:cssText(concatstyles({&lt;br /&gt;
				(k &amp;gt; 1) and &#039;border-left:2px solid #fdfdfd&#039; or &#039;&#039;,&lt;br /&gt;
				&#039;font-weight:bold&#039;,&lt;br /&gt;
				pargs[cfg.arg.colheaderstyle] or &#039;&#039;,&lt;br /&gt;
				pargs[andnum(&#039;colheaderstyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
			}))&lt;br /&gt;
			col:attr(&#039;colspan&#039;, tonumber(pargs[andnum(&#039;colheadercolspan&#039;, n)]))&lt;br /&gt;
			col:wikitext(pargs[andnum(&#039;colheader&#039;, n)])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Main columns ---&lt;br /&gt;
	row = coltable:tag(&#039;tr&#039;):css(&#039;vertical-align&#039;, &#039;top&#039;)&lt;br /&gt;
	for k, n in ipairs(colnums) do&lt;br /&gt;
		if k == 1 and isblank(pargs[andnum(&#039;colheader&#039;, 1)])&lt;br /&gt;
				and isblank(pargs[andnum(&#039;colfooter&#039;, 1)])&lt;br /&gt;
				and isblank(pargs[cfg.arg.fullwidth]) then&lt;br /&gt;
			local nopad = inArray(&lt;br /&gt;
				{&#039;off&#039;, &#039;0&#039;, &#039;0em&#039;, &#039;0px&#039;},&lt;br /&gt;
				mw.ustring.gsub(pargs[cfg.arg.padding] or &#039;&#039;, &#039;[;%%]&#039;, &#039;&#039;))&lt;br /&gt;
			if not nopad then&lt;br /&gt;
				row:tag(&#039;td&#039;):wikitext(&#039;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;)&lt;br /&gt;
					:css(&#039;width&#039;, (pargs[cfg.arg.padding] or &#039;5em&#039;))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		col = row:tag(&#039;td&#039;):addClass(&#039;navbox-list&#039;)&lt;br /&gt;
		col:cssText(concatstyles({&lt;br /&gt;
			(k &amp;gt; 1) and &#039;border-left:2px solid #fdfdfd&#039; or &#039;&#039;,&lt;br /&gt;
			&#039;padding:0px&#039;,&lt;br /&gt;
			pargs[cfg.arg.colstyle] or &#039;&#039;,&lt;br /&gt;
			((n%2 == 0) and pargs[cfg.arg.evencolstyle] or pargs[cfg.arg.oddcolstyle]) or &#039;&#039;,&lt;br /&gt;
			pargs[andnum(&#039;colstyle&#039;, n)] or &#039;&#039;,&lt;br /&gt;
			&#039;width:&#039; .. (pargs[andnum(&#039;colwidth&#039;, n)] or pargs[cfg.arg.colwidth] or &#039;10em&#039;)&lt;br /&gt;
		}))&lt;br /&gt;
		local wt = pargs[andnum(&#039;col&#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(&#039;div&#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(&#039;tr&#039;)&lt;br /&gt;
		for k, n in ipairs(colfooternums) do&lt;br /&gt;
			col = row:tag(&#039;td&#039;):addClass(&#039;navbox-abovebelow&#039;)&lt;br /&gt;
			col:cssText(concatstyles({&lt;br /&gt;
				(k &amp;gt; 1) and &#039;border-left:2px solid #fdfdfd&#039; or &#039;&#039;,&lt;br /&gt;
				&#039;font-weight:bold&#039;,&lt;br /&gt;
				pargs[cfg.arg.colfooterstyle] or &#039;&#039;,&lt;br /&gt;
				pargs[andnum(&#039;colfooterstyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
			}))&lt;br /&gt;
			col:attr(&#039;colspan&#039;, tonumber(pargs[andnum(&#039;colfootercolspan&#039;, n)]))&lt;br /&gt;
			col:wikitext(pargs[andnum(&#039;colfooter&#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(&#039;list&#039;, 1)] = tostring(coltable)&lt;br /&gt;
	if isblank(pargs[andnum(&#039;colheader&#039;, 1)]) &lt;br /&gt;
			and isblank(pargs[andnum(&#039;col&#039;, 1)])&lt;br /&gt;
			and isblank(pargs[andnum(&#039;colfooter&#039;, 1)]) then&lt;br /&gt;
		targs[andnum(&#039;list&#039;, 1)] = targs[andnum(&#039;list&#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] = &#039;0px&#039;&lt;br /&gt;
	targs[andnum(&#039;liststyle&#039;, 1)] = &#039;background:transparent;color:inherit;&#039;&lt;br /&gt;
	targs[cfg.arg.style] = concatstyles({pargs[cfg.arg.style], pargs[cfg.arg.bodystyle]})&lt;br /&gt;
	targs[cfg.arg.tracking] = &#039;no&#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&#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 &#039;most&#039; cases (that&#039;s a SWAG) and because&lt;br /&gt;
		-- iterator approach won&#039;t work here&lt;br /&gt;
		for i = 1, 20 do&lt;br /&gt;
			_ = _ + (args[prefix .. andnum(&#039;group&#039;, i)] and #args[prefix .. andnum(&#039;group&#039;, i)] or 0)&lt;br /&gt;
			if inArray(cfg.keyword.subgroups, args[prefix .. andnum(&#039;list&#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(&#039;col&#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(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	local args = getArgs(frame, {wrappers = {cfg.pattern[boxtype or &#039;navbox&#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[&#039;_navbox&#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, &#039;with_collapsible_groups&#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, &#039;with_columns&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Navbar&amp;diff=328</id>
		<title>Module:Navbar</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Navbar&amp;diff=328"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
local cfg = mw.loadData(&#039;Module:Navbar/configuration&#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 = &#039;template&#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 (&#039;Module:TableTools&#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 = {&#039;[&#039;, &#039;&#039;, &#039;]&#039;}&lt;br /&gt;
	else&lt;br /&gt;
		l = {&#039;[[&#039;, &#039;|&#039;, &#039;]]&#039;}&lt;br /&gt;
	end&lt;br /&gt;
	ul:tag(&#039;li&#039;)&lt;br /&gt;
		:addClass(&#039;nv-&#039; .. link_description.full)&lt;br /&gt;
		:wikitext(l[1] .. link_description.link .. l[2])&lt;br /&gt;
		:tag(is_mini and &#039;abbr&#039; or &#039;span&#039;)&lt;br /&gt;
			:attr(&#039;title&#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 &#039;&#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;
		{ [&#039;mini&#039;] = &#039;v&#039;, [&#039;full&#039;] = &#039;view&#039;, [&#039;html_title&#039;] = &#039;View this template&#039;,&lt;br /&gt;
			[&#039;link&#039;] = title.fullText, [&#039;url&#039;] = false },&lt;br /&gt;
		{ [&#039;mini&#039;] = &#039;t&#039;, [&#039;full&#039;] = &#039;talk&#039;, [&#039;html_title&#039;] = &#039;Discuss this template&#039;,&lt;br /&gt;
			[&#039;link&#039;] = talkpage, [&#039;url&#039;] = false },&lt;br /&gt;
		{ [&#039;mini&#039;] = &#039;e&#039;, [&#039;full&#039;] = &#039;edit&#039;, [&#039;html_title&#039;] = &#039;Edit this template&#039;,&lt;br /&gt;
			[&#039;link&#039;] = &#039;Special:EditPage/&#039; .. title.fullText, [&#039;url&#039;] = false },&lt;br /&gt;
		{ [&#039;mini&#039;] = &#039;h&#039;, [&#039;full&#039;] = &#039;hist&#039;, [&#039;html_title&#039;] = &#039;History of this template&#039;,&lt;br /&gt;
			[&#039;link&#039;] = &#039;Special:PageHistory/&#039; .. title.fullText, [&#039;url&#039;] = false },&lt;br /&gt;
		{ [&#039;mini&#039;] = &#039;m&#039;, [&#039;full&#039;] = &#039;move&#039;, [&#039;html_title&#039;] = &#039;Move this template&#039;,&lt;br /&gt;
			[&#039;link&#039;] = mw.title.new(&#039;Special:Movepage&#039;):fullUrl(&#039;target=&#039;..title.fullText), [&#039;url&#039;] = true },&lt;br /&gt;
		{ [&#039;mini&#039;] = &#039;w&#039;, [&#039;full&#039;] = &#039;watch&#039;, [&#039;html_title&#039;] = &#039;Watch this template&#039;, &lt;br /&gt;
			[&#039;link&#039;] = title:fullUrl(&#039;action=watch&#039;), [&#039;url&#039;] = true }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local ul = mw.html.create(&#039;ul&#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&#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 &#039;&#039;) .. &#039;; color: &#039; .. font_color .. &#039;;&#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(&#039;div&#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) .. &#039; &#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(&#039;span&#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 (&#039;:&#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(&#039;div&#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 = &#039;templatestyles&#039;, args = { src = cfg.hlist_templatestyles }&lt;br /&gt;
	} .. frame:extensionTag{&lt;br /&gt;
		name = &#039;templatestyles&#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(&#039;Module:Arguments&#039;).getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Lua_banner&amp;diff=326</id>
		<title>Module:Lua banner</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Lua_banner&amp;diff=326"/>
		<updated>2026-04-09T23:40:46Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements the {{lua}} template.&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
local mList = require(&#039;Module:List&#039;)&lt;br /&gt;
local mTableTools = require(&#039;Module:TableTools&#039;)&lt;br /&gt;
local mMessageBox = require(&#039;Module:Message box&#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(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if v ~= &#039;&#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 = &#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Error: no modules specified&amp;lt;/strong&amp;gt;&#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(&#039;[[:%s]]&#039;, module)&lt;br /&gt;
			local maybeSandbox = mw.title.new(module .. &#039;/sandbox&#039;)&lt;br /&gt;
			if maybeSandbox and maybeSandbox.exists then&lt;br /&gt;
				moduleLinks[i] = moduleLinks[i] .. string.format(&#039; ([[:%s|sandbox]])&#039;, maybeSandbox.fullText)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local moduleList = mList.makeList(&#039;bulleted&#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 = &#039;This module depends on the following other modules:&#039; .. moduleList&lt;br /&gt;
		else&lt;br /&gt;
			boxArgs.text = &#039;This template  uses [[Wikipedia:Lua|Lua]]:\n&#039; .. moduleList&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	boxArgs.type = &#039;notice&#039;&lt;br /&gt;
	boxArgs.small = true&lt;br /&gt;
	boxArgs.image = &#039;[[File:Lua-Logo.svg|30px|alt=|link=]]&#039;&lt;br /&gt;
	return mMessageBox.main(&#039;mbox&#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 &#039;&#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] = &#039;Lua templates with errors&#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;
					[&#039;Module:String&#039;] = &#039;Templates based on the String Lua module&#039;,&lt;br /&gt;
					[&#039;Module:Math&#039;] = &#039;Templates based on the Math Lua module&#039;,&lt;br /&gt;
					[&#039;Module:BaseConvert&#039;] = &#039;Templates based on the BaseConvert Lua module&#039;,&lt;br /&gt;
					[&#039;Module:Citation/CS1&#039;] = &#039;Templates based on the Citation/CS1 Lua module&#039;&lt;br /&gt;
				}&lt;br /&gt;
				category = modules[1] and categories[modules[1]]&lt;br /&gt;
				category = category or &#039;Lua-based templates&#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(&#039;[[Category:%s]]&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Infobox&amp;diff=324</id>
		<title>Module:Infobox</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Infobox&amp;diff=324"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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( &#039;%S&#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 = &#039;&amp;lt;span class=special_infobox_marker&amp;gt;&#039;&lt;br /&gt;
		local s = sval&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;(&amp;lt;%s*[Tt][Rr])&#039;, marker .. &#039;%1&#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;(&amp;lt;/[Tt][Rr]%s*&amp;gt;)&#039;, &#039;%1&#039; .. marker)&lt;br /&gt;
		if s:match(marker) then&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &#039;%s*&#039; .. marker, &#039;&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;([\r\n]|-[^\r\n]*[\r\n])%s*&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &#039;%s*([\r\n]|-)&#039;, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;(&amp;lt;/[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*&amp;gt;%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;(&amp;lt;%s*[Tt][Aa][Bb][Ll][Ee][^&amp;lt;&amp;gt;]*&amp;gt;%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;^(%{|[^\r\n]*[\r\n]%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;([\r\n]%{|[^\r\n]*[\r\n]%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &#039;(%s*&amp;lt;/[Tt][Aa][Bb][Ll][Ee]%s*&amp;gt;)&#039;, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &#039;(%s*\n|%})&#039;, &#039;%1&#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 = &#039;&#039;&lt;br /&gt;
			for k = 1, #subcells do&lt;br /&gt;
				if k == 1 then&lt;br /&gt;
					s = s .. subcells[k] .. &#039;&amp;lt;/&#039; .. tt .. &#039;&amp;gt;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
				elseif k == #subcells then&lt;br /&gt;
					local rowstyle = &#039; style=&amp;quot;display:none&amp;quot;&#039;&lt;br /&gt;
					if notempty(subcells[k]) then rowstyle = &#039;&#039;	end&lt;br /&gt;
					s = s .. &#039;&amp;lt;tr&#039; .. rowstyle ..&#039;&amp;gt;&amp;lt;&#039; .. tt .. &#039; colspan=2&amp;gt;\n&#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 .. &#039;&amp;lt;tr&amp;gt;&amp;lt;&#039; .. tt .. &#039; colspan=2&amp;gt;\n&#039; .. subcells[k] .. &#039;&amp;lt;/&#039; .. tt .. &#039;&amp;gt;&amp;lt;/tr&amp;gt;&#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, &#039;([\r\n][%*#;:][^\r\n]*)$&#039;, &#039;%1\n&#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;^([%*#;:][^\r\n]*)$&#039;, &#039;%1\n&#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;^([%*#;:])&#039;, &#039;\n%1&#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;^(%{%|)&#039;, &#039;\n%1&#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 &#039;data&#039;, and&lt;br /&gt;
	-- &#039;data1&#039;, &#039;data2&#039;, and &#039;data5&#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(&#039;^&#039; .. prefix .. &#039;([1-9]%d*)$&#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 ~= &#039;_BLANK_&#039; then&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&#039;tr&#039;)&lt;br /&gt;
				:addClass(rowArgs.rowclass)&lt;br /&gt;
				:cssText(rowArgs.rowstyle)&lt;br /&gt;
				:attr(&#039;id&#039;, rowArgs.rowid)&lt;br /&gt;
				:tag(&#039;th&#039;)&lt;br /&gt;
					:attr(&#039;colspan&#039;, 2)&lt;br /&gt;
					:attr(&#039;id&#039;, rowArgs.headerid)&lt;br /&gt;
					:addClass(rowArgs.class)&lt;br /&gt;
					:addClass(args.headerclass)&lt;br /&gt;
					:css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
					:cssText(args.headerstyle)&lt;br /&gt;
					:cssText(rowArgs.rowcellstyle)&lt;br /&gt;
					:wikitext(fixChildBoxes(rowArgs.header, &#039;th&#039;))&lt;br /&gt;
	elseif rowArgs.data then&lt;br /&gt;
		if not rowArgs.data:gsub(&#039;%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]&#039;, &#039;&#039;):match(&#039;^%S&#039;) then&lt;br /&gt;
			rowArgs.rowstyle = &#039;display:none&#039;&lt;br /&gt;
		end&lt;br /&gt;
		local row = root:tag(&#039;tr&#039;)&lt;br /&gt;
		row:addClass(rowArgs.rowclass)&lt;br /&gt;
		row:cssText(rowArgs.rowstyle)&lt;br /&gt;
		row:attr(&#039;id&#039;, rowArgs.rowid)&lt;br /&gt;
		if rowArgs.label then&lt;br /&gt;
			row&lt;br /&gt;
				:tag(&#039;th&#039;)&lt;br /&gt;
					:attr(&#039;scope&#039;, &#039;row&#039;)&lt;br /&gt;
					:attr(&#039;id&#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(&#039;td&#039;)&lt;br /&gt;
		if not rowArgs.label then&lt;br /&gt;
			dataCell&lt;br /&gt;
				:attr(&#039;colspan&#039;, 2)&lt;br /&gt;
				:css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		dataCell&lt;br /&gt;
			:attr(&#039;id&#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, &#039;td&#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(&#039;caption&#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(&#039;tr&#039;)&lt;br /&gt;
			:tag(&#039;th&#039;)&lt;br /&gt;
				:attr(&#039;colspan&#039;, 2)&lt;br /&gt;
				:addClass(args.aboveclass)&lt;br /&gt;
				:css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
				:css(&#039;font-size&#039;, &#039;125%&#039;)&lt;br /&gt;
				:css(&#039;font-weight&#039;, &#039;bold&#039;)&lt;br /&gt;
				:cssText(args.abovestyle)&lt;br /&gt;
				:wikitext(fixChildBoxes(args.above,&#039;th&#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(&#039;tr&#039;)&lt;br /&gt;
			:tag(&#039;td&#039;)&lt;br /&gt;
				:attr(&#039;colspan&#039;, &#039;2&#039;)&lt;br /&gt;
				:addClass(args.belowclass)&lt;br /&gt;
				:css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
				:cssText(args.belowstyle)&lt;br /&gt;
				:wikitext(fixChildBoxes(args.below,&#039;td&#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(&#039;subheader&#039;)&lt;br /&gt;
	for k, num in ipairs(subheadernums) do&lt;br /&gt;
		addRow({&lt;br /&gt;
			data = args[&#039;subheader&#039; .. tostring(num)],&lt;br /&gt;
			datastyle = args.subheaderstyle,&lt;br /&gt;
			rowcellstyle = args[&#039;subheaderstyle&#039; .. tostring(num)],&lt;br /&gt;
			class = args.subheaderclass,&lt;br /&gt;
			rowclass = args[&#039;subheaderrowclass&#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(&#039;image&#039;)&lt;br /&gt;
	for k, num in ipairs(imagenums) do&lt;br /&gt;
		local caption = args[&#039;caption&#039; .. tostring(num)]&lt;br /&gt;
		local data = mw.html.create():wikitext(args[&#039;image&#039; .. tostring(num)])&lt;br /&gt;
		if caption then&lt;br /&gt;
			data&lt;br /&gt;
				:tag(&#039;div&#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[&#039;imagerowclass&#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(&#039;header&#039;), getArgNums(&#039;data&#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[&#039;header&#039; .. tostring(num)] then&lt;br /&gt;
			if lastheader then&lt;br /&gt;
				args[&#039;header&#039; .. tostring(lastheader)] = nil&lt;br /&gt;
			end&lt;br /&gt;
			lastheader = num&lt;br /&gt;
		elseif args[&#039;data&#039; .. tostring(num)] and args[&#039;data&#039; .. tostring(num)]:gsub(&#039;%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]&#039;, &#039;&#039;):match(&#039;^%S&#039;) then&lt;br /&gt;
			local data = args[&#039;data&#039; .. tostring(num)]&lt;br /&gt;
			if data:gsub(&#039;%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]&#039;, &#039;&#039;):match(&#039;%S&#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[&#039;header&#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(&#039;header&#039;), getArgNums(&#039;data&#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[&#039;header&#039; .. tostring(num)],&lt;br /&gt;
			label = args[&#039;label&#039; .. tostring(num)],&lt;br /&gt;
			data = args[&#039;data&#039; .. tostring(num)],&lt;br /&gt;
			datastyle = args.datastyle,&lt;br /&gt;
			class = args[&#039;class&#039; .. tostring(num)],&lt;br /&gt;
			rowclass = args[&#039;rowclass&#039; .. tostring(num)],&lt;br /&gt;
			rowstyle = args[&#039;rowstyle&#039; .. tostring(num)],&lt;br /&gt;
			rowcellstyle = args[&#039;rowcellstyle&#039; .. tostring(num)],&lt;br /&gt;
			dataid = args[&#039;dataid&#039; .. tostring(num)],&lt;br /&gt;
			labelid = args[&#039;labelid&#039; .. tostring(num)],&lt;br /&gt;
			headerid = args[&#039;headerid&#039; .. tostring(num)],&lt;br /&gt;
			rowid = args[&#039;rowid&#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 &#039;child&#039; inside another infobox.&lt;br /&gt;
	if args.child ~= &#039;yes&#039; then&lt;br /&gt;
		root = mw.html.create(&#039;table&#039;)&lt;br /&gt;
&lt;br /&gt;
		root&lt;br /&gt;
			:addClass((args.subbox ~= &#039;yes&#039;) and &#039;infobox&#039; or nil)&lt;br /&gt;
			:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
			if args.subbox == &#039;yes&#039; then&lt;br /&gt;
				root&lt;br /&gt;
					:css(&#039;padding&#039;, &#039;0&#039;)&lt;br /&gt;
					:css(&#039;border&#039;, &#039;none&#039;)&lt;br /&gt;
					:css(&#039;margin&#039;, &#039;-3px&#039;)&lt;br /&gt;
					:css(&#039;width&#039;, &#039;auto&#039;)&lt;br /&gt;
					:css(&#039;min-width&#039;, &#039;100%&#039;)&lt;br /&gt;
					:css(&#039;font-size&#039;, &#039;100%&#039;)&lt;br /&gt;
					:css(&#039;clear&#039;, &#039;none&#039;)&lt;br /&gt;
					:css(&#039;float&#039;, &#039;none&#039;)&lt;br /&gt;
					:css(&#039;background-color&#039;, &#039;transparent&#039;)&lt;br /&gt;
			else&lt;br /&gt;
				root&lt;br /&gt;
					:css(&#039;width&#039;, &#039;22em&#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&#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] ~= &#039;&#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) ~= &#039;table&#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) ~= &#039;number&#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) ~= &#039;table&#039; or type(v.prefix) ~= &amp;quot;string&amp;quot; or (v.depend and type(v.depend) ~= &#039;table&#039;) then&lt;br /&gt;
			error(&#039;Invalid input detected to preprocessArgs prefix table&#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) ~= &#039;string&#039; then&lt;br /&gt;
					error(&#039;Invalid &amp;quot;depend&amp;quot; parameter value detected in preprocessArgs&#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(&#039;autoheaders&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;child&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;bodyclass&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;subbox&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;bodystyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;title&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;titleclass&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;titlestyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;above&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;aboveclass&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;abovestyle&#039;)&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = &#039;subheader&#039;, depend = {&#039;subheaderstyle&#039;, &#039;subheaderrowclass&#039;}}&lt;br /&gt;
	}, 10)&lt;br /&gt;
	preprocessSingleArg(&#039;subheaderstyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;subheaderclass&#039;)&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = &#039;image&#039;, depend = {&#039;caption&#039;, &#039;imagerowclass&#039;}}&lt;br /&gt;
	}, 10)&lt;br /&gt;
	preprocessSingleArg(&#039;captionstyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;imagestyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;imageclass&#039;)&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = &#039;header&#039;},&lt;br /&gt;
		{prefix = &#039;data&#039;, depend = {&#039;label&#039;}},&lt;br /&gt;
		{prefix = &#039;rowclass&#039;},&lt;br /&gt;
		{prefix = &#039;rowstyle&#039;},&lt;br /&gt;
		{prefix = &#039;rowcellstyle&#039;},&lt;br /&gt;
		{prefix = &#039;class&#039;},&lt;br /&gt;
		{prefix = &#039;dataid&#039;},&lt;br /&gt;
		{prefix = &#039;labelid&#039;},&lt;br /&gt;
		{prefix = &#039;headerid&#039;},&lt;br /&gt;
		{prefix = &#039;rowid&#039;}&lt;br /&gt;
	}, 50)&lt;br /&gt;
	preprocessSingleArg(&#039;headerclass&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;headerstyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;labelstyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;datastyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;below&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;belowclass&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;belowstyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;name&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;decat&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:High-use&amp;diff=322</id>
		<title>Module:High-use</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:High-use&amp;diff=322"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;strict&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
local _fetch = require(&#039;Module:Transclusion_count&#039;)._fetch -- _fetch looks at the &#039;demo&#039; argument&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#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 = &#039;Wikipedia:User pages#SUB&#039;&lt;br /&gt;
local sandbox_module_page = &#039;Module:Sandbox&#039;&lt;br /&gt;
local system_messages_cat = &#039;Pages used in system messages needing protection&#039;&lt;br /&gt;
local sandbox_word = &#039;sandbox&#039;&lt;br /&gt;
local testcases_word = &#039;testcases&#039;&lt;br /&gt;
local doc_word = &#039;doc&#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[&#039;fetch&#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] ~= &#039;&#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], &#039;+$&#039;, &#039;&#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]  == &#039;risk&#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 &#039;risk&#039; or &#039;&#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 = &#039;&#039;&lt;br /&gt;
	if args.count == nil and args.risk then&lt;br /&gt;
		return &#039;a very large number of&#039;&lt;br /&gt;
	elseif args.count == nil then&lt;br /&gt;
		return &#039;many&#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 &#039;approximately&#039; or &#039;+&#039; when appropriate&lt;br /&gt;
		if yesno(args[2]) == true or (type(args[1]) == &#039;string&#039; and (mw.ustring.sub(args[1], -1) == &#039;+&#039;)) then&lt;br /&gt;
			-- Round down&lt;br /&gt;
			return_value = string.format(&#039;%s+&#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(&#039;approximately&amp;amp;#x20;%s&#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[&#039;no-percent&#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(&#039;NUMBEROFPAGES&#039;, &#039;R&#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(&#039;%s&amp;amp;#x20;pages, or roughly %s%% of all&#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(&#039;{{REVISIONID}}&#039;) == &#039;&#039;) and (&amp;quot;\n\n----\n&#039;&#039;&#039;Preview message&#039;&#039;&#039;:&amp;quot; .. &#039; Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]]).&#039;) or &#039;&#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 ~= &#039;&#039; and mw.title.new(args.demo, &#039;Template&#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 .. &#039;/&#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 .. &#039;/&#039; .. testcases_word)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local systemMessages = (args[&#039;system&#039;] or &#039;&#039;) ~= &#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
	-- This retrieves the project URL automatically to simplify localization.&lt;br /&gt;
	local templateCount = (&#039;on [https://linkcount.toolforge.org/?project=%s&amp;amp;page=%s#transclusions %s pages]&#039;):format(&lt;br /&gt;
		title:fullUrl():gsub(&#039;//(.-)/.*&#039;, &#039;%1&#039;),&lt;br /&gt;
		mw.uri.encode(title.fullText), p._num(args))&lt;br /&gt;
	local used_on_text = &amp;quot;&#039;&#039;&#039;This &amp;quot; .. (title:inNamespace(&#039;Module&#039;) and &#039;Lua module&#039; or &#039;template&#039;) .. &#039; is used &#039;&lt;br /&gt;
	if systemMessages then&lt;br /&gt;
		used_on_text = used_on_text .. args[&#039;system&#039;] ..&lt;br /&gt;
			((args.count and args.count &amp;gt; 2000) and (&amp;quot;&#039;&#039;&#039;, and &amp;quot; .. templateCount) or (&amp;quot;&#039;&#039;&#039;&amp;quot;))&lt;br /&gt;
	else&lt;br /&gt;
		used_on_text = used_on_text .. templateCount .. &amp;quot;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local sandbox_text = (&#039;%s\&#039;s [[%s/sandbox|/sandbox]] or [[%s|/testcases]] subpages, or in your own [[%s]]. &#039;):format(&lt;br /&gt;
		title:inNamespace(&#039;Module&#039;) and &#039;module&#039; or &#039;template&#039;,&lt;br /&gt;
		title.fullText,&lt;br /&gt;
		testcases_page.fullText,&lt;br /&gt;
		title:inNamespace(&#039;Module&#039;) and (sandbox_module_page .. &#039;|module sandbox&#039;) or (user_subpage_info_page .. &#039;|user subpage&#039;)&lt;br /&gt;
	)&lt;br /&gt;
	&lt;br /&gt;
	local infoArg = args[&#039;info&#039;] ~= &#039;&#039; and args[&#039;info&#039;]&lt;br /&gt;
	if (systemMessages or args.risk) then&lt;br /&gt;
		local info = &#039;.&#039;&lt;br /&gt;
		if systemMessages then&lt;br /&gt;
			info = info .. &#039;&amp;lt;br /&amp;gt;Changes to it can cause immediate changes to the &#039; .. mw.site.namespaces.Project.name .. &#039; user interface.&#039;&lt;br /&gt;
		end&lt;br /&gt;
		if infoArg then&lt;br /&gt;
			info = info .. &#039;&amp;lt;br /&amp;gt;&#039; .. infoArg&lt;br /&gt;
		end&lt;br /&gt;
		sandbox_text = info .. &#039;&amp;lt;br /&amp;gt; To avoid major disruption&#039; ..&lt;br /&gt;
			(args.count and args.count &amp;gt;= large_count_cutoff and &#039; and server load&#039; or &#039;&#039;) .. -- should this use args.risk?&lt;br /&gt;
			&#039;, any changes should be tested in the &#039; .. sandbox_text ..&lt;br /&gt;
			&#039;The tested changes can be added to this page in a single edit. &#039;&lt;br /&gt;
	else&lt;br /&gt;
		sandbox_text = (infoArg and (&#039;.&amp;lt;br /&amp;gt;&#039; .. infoArg .. &#039; C&#039;) or &#039; and c&#039;) ..&lt;br /&gt;
			&#039;hanges may be widely noticed. Test changes in the &#039; .. sandbox_text&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local discussion_text = systemMessages and &#039;Please discuss changes &#039; or &#039;Consider discussing changes &#039;&lt;br /&gt;
	if args[2] ~= nil and args[2] ~= &#039;&#039; and yesno(args[2]) == nil then&lt;br /&gt;
		discussion_text = string.format(&#039;%sat [[%s]]&#039;, discussion_text, args[2])&lt;br /&gt;
	else&lt;br /&gt;
		discussion_text = string.format(&#039;%son the [[%s|talk page]]&#039;, discussion_text, title.talkPageTitle.fullText)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return used_on_text .. sandbox_text .. discussion_text .. &#039; before implementing them.&#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 ~= &#039;&#039; and mw.title.new(args.demo, &#039;Template&#039;)) or mw.title.getCurrentTitle()&lt;br /&gt;
	&lt;br /&gt;
	local image = &#039;Ambox warning yellow.svg&#039;&lt;br /&gt;
	local type_param = &#039;style&#039;&lt;br /&gt;
	local epilogue = &#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
	if args[&#039;system&#039;] and args[&#039;system&#039;] ~= &#039;&#039; then&lt;br /&gt;
		image = &#039;Ambox important.svg&#039;&lt;br /&gt;
		type_param = &#039;content&#039;&lt;br /&gt;
		if yesno(nocat or args[&#039;nocat&#039;]) ~= true and not args.title.isRedirect then&lt;br /&gt;
			local protection_action = (args.title:inNamespace(&#039;File&#039;) and &#039;upload&#039;) or &#039;edit&#039;&lt;br /&gt;
			local protection_level = require(&#039;Module:Effective protection level&#039;)._main(protection_action, args.title.fullText)&lt;br /&gt;
			&lt;br /&gt;
			if protection_level ~= &#039;sysop&#039; and protection_level ~= &#039;templateeditor&#039; and protection_level ~= &#039;interfaceadmin&#039; then&lt;br /&gt;
				epilogue = mw.getCurrentFrame():expandTemplate {&lt;br /&gt;
					title = &#039;sandbox other&#039;,&lt;br /&gt;
					args = {&lt;br /&gt;
						[2] = &#039;[[Category:&#039; .. system_messages_cat .. &#039;]]&#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 = &#039;Ambox warning orange.svg&#039;&lt;br /&gt;
		type_param = &#039;content&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	image = &#039;[[File:&#039; .. image .. &#039;|40px|alt=Warning|link=]]&#039;&lt;br /&gt;
	if args[&#039;form&#039;] == &#039;editnotice&#039; then&lt;br /&gt;
		return mw.getCurrentFrame():expandTemplate{&lt;br /&gt;
				title = &#039;editnotice&#039;,&lt;br /&gt;
				args = {&lt;br /&gt;
						[&#039;image&#039;] = image,&lt;br /&gt;
						[&#039;text&#039;] = p._text(args),&lt;br /&gt;
						[&#039;expiry&#039;] = (args[&#039;expiry&#039;] or &#039;&#039;)&lt;br /&gt;
				}&lt;br /&gt;
		} .. epilogue&lt;br /&gt;
	else&lt;br /&gt;
		return require(&#039;Module:Message box&#039;).main(&#039;ombox&#039;, {&lt;br /&gt;
			type = type_param,&lt;br /&gt;
			image = image,&lt;br /&gt;
			text = p._text(args),&lt;br /&gt;
			expiry = (args[&#039;expiry&#039;] or &#039;&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Check_for_unknown_parameters&amp;diff=320</id>
		<title>Module:Check for unknown parameters</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Check_for_unknown_parameters&amp;diff=320"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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 (&#039;strict&#039;);&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local mapframe_params = {&lt;br /&gt;
	&#039;coord&#039;,&lt;br /&gt;
	&#039;coordinates&#039;,&lt;br /&gt;
	&#039;id&#039;,&lt;br /&gt;
	&#039;qid&#039;,&lt;br /&gt;
	&#039;mapframe&#039;,&lt;br /&gt;
	&#039;mapframe-area_km2&#039;,&lt;br /&gt;
	&#039;mapframe-area_mi2&#039;,&lt;br /&gt;
	&#039;mapframe-caption&#039;,&lt;br /&gt;
	&#039;mapframe-coord&#039;,&lt;br /&gt;
	&#039;mapframe-coordinates&#039;,&lt;br /&gt;
	&#039;mapframe-custom&#039;,&lt;br /&gt;
	&#039;mapframe-frame-coord&#039;,&lt;br /&gt;
	&#039;mapframe-frame-coordinates&#039;,&lt;br /&gt;
	&#039;mapframe-frame-height&#039;,&lt;br /&gt;
	&#039;mapframe-frame-width&#039;,&lt;br /&gt;
	&#039;mapframe-geomask&#039;,&lt;br /&gt;
	&#039;mapframe-geomask-fill&#039;,&lt;br /&gt;
	&#039;mapframe-geomask-fill-opacity&#039;,&lt;br /&gt;
	&#039;mapframe-geomask-stroke-color&#039;,&lt;br /&gt;
	&#039;mapframe-geomask-stroke-colour&#039;,&lt;br /&gt;
	&#039;mapframe-geomask-stroke-width&#039;,&lt;br /&gt;
	&#039;mapframe-height&#039;,&lt;br /&gt;
	&#039;mapframe-id&#039;,&lt;br /&gt;
	&#039;mapframe-length_km&#039;,&lt;br /&gt;
	&#039;mapframe-length_mi&#039;,&lt;br /&gt;
	&#039;mapframe-line&#039;,&lt;br /&gt;
	&#039;mapframe-line-stroke-color&#039;,&lt;br /&gt;
	&#039;mapframe-line-stroke-colour&#039;,&lt;br /&gt;
	&#039;mapframe-marker&#039;,&lt;br /&gt;
	&#039;mapframe-marker-color&#039;,&lt;br /&gt;
	&#039;mapframe-marker-colour&#039;,&lt;br /&gt;
	&#039;mapframe-point&#039;,&lt;br /&gt;
	&#039;mapframe-population&#039;,&lt;br /&gt;
	&#039;mapframe-shape&#039;,&lt;br /&gt;
	&#039;mapframe-shape-fill&#039;,&lt;br /&gt;
	&#039;mapframe-shape-fill-opacity&#039;,&lt;br /&gt;
	&#039;mapframe-shape-stroke-color&#039;,&lt;br /&gt;
	&#039;mapframe-shape-stroke-colour&#039;,&lt;br /&gt;
	&#039;mapframe-stroke-color&#039;,&lt;br /&gt;
	&#039;mapframe-stroke-colour&#039;,&lt;br /&gt;
	&#039;mapframe-stroke-width&#039;,&lt;br /&gt;
	&#039;mapframe-switcher&#039;,&lt;br /&gt;
	&#039;mapframe-type&#039;,&lt;br /&gt;
	&#039;mapframe-width&#039;,&lt;br /&gt;
	&#039;mapframe-wikidata&#039;,&lt;br /&gt;
	&#039;mapframe-zoom&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function trim(s)&lt;br /&gt;
	return s:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isnotempty(s)&lt;br /&gt;
	return s and s:match(&#039;%S&#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 &#039;&#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) .. &#039;...&#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(&#039;([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()&#039;) do&lt;br /&gt;
		pos = remainder&lt;br /&gt;
		table.insert(parts, truncate(before) .. &#039;&amp;amp;lt;&#039; .. tag .. &#039;&amp;amp;gt;...&amp;amp;lt;/&#039; .. tag .. &#039;&amp;amp;gt;&#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[&#039;mapframe_args&#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) == &#039;number&#039; then&lt;br /&gt;
			v = trim(v)&lt;br /&gt;
			knownargs[v] = 1&lt;br /&gt;
		elseif k:find(&#039;^regexp[1-9][0-9]*$&#039;) then&lt;br /&gt;
			table.insert(regexps, &#039;^&#039; .. v .. &#039;$&#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[&#039;ignoreblank&#039;])&lt;br /&gt;
	local showblankpos = isnotempty(args[&#039;showblankpositional&#039;])&lt;br /&gt;
	local values = {}&lt;br /&gt;
	for k, v in pairs(pargs) do&lt;br /&gt;
		if type(k) == &#039;string&#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) == &#039;number&#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 .. &#039; = &#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[&#039;unknown&#039;] or &#039;Found _VALUE_, &#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[&#039;preview&#039;]&lt;br /&gt;
			if isnotempty(preview_text) then&lt;br /&gt;
				preview_text = require(&#039;Module:If preview&#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 == &#039;&#039; then v = &#039; &#039; end&lt;br /&gt;
&lt;br /&gt;
			-- avoid error with v = &#039;example%2&#039; (&amp;quot;invalid capture index&amp;quot;)&lt;br /&gt;
			local r = unknown_text:gsub(&#039;_VALUE_&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Documentation/config&amp;diff=318</id>
		<title>Module:Documentation/config</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Documentation/config&amp;diff=318"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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(&#039;Module:TNT&#039;).format&lt;br /&gt;
local function format(id)&lt;br /&gt;
	return _format(&#039;I18n/Documentation&#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[&#039;templatestyles-scr&#039;] = &#039;Module:Documentation/styles.css&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Protection template configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;protection-template&#039;]&lt;br /&gt;
-- The name of the template that displays the protection icon (a padlock on enwiki).&lt;br /&gt;
cfg[&#039;protection-template&#039;] = &#039;PP-template&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;protection-reason-edit&#039;]&lt;br /&gt;
-- The protection reason for edit-protected templates to pass to&lt;br /&gt;
-- [[Module:Protection banner]].&lt;br /&gt;
cfg[&#039;protection-reason-edit&#039;] = &#039;template&#039;&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;protection-template-args&#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 = &#039;yes&#039;}&amp;quot;.&lt;br /&gt;
 --]]&lt;br /&gt;
 cfg[&#039;protection-template-args&#039;] = {docusage = &#039;yes&#039;}&lt;br /&gt;
cfg[&#039;main-div-classes&#039;] = &#039;template-documentation iezoomfix&#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[&#039;sandbox-subpage&#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[&#039;sandbox-notice-image&#039;]&lt;br /&gt;
-- The image displayed in the sandbox notice.&lt;br /&gt;
cfg[&#039;sandbox-notice-image&#039;] = &#039;[[Image:Edit In Sandbox Icon - Color.svg|40px|alt=|link=]]&#039;&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;sandbox-notice-pagetype-template&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-pagetype-module&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-pagetype-other&#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[&#039;sandbox-notice-blurb&#039;] or&lt;br /&gt;
-- cfg[&#039;sandbox-notice-diff-blurb&#039;].&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;sandbox-notice-pagetype-template&#039;] = format(&#039;sandbox-notice-pagetype-template&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-pagetype-module&#039;] = format(&#039;sandbox-notice-pagetype-module&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-pagetype-other&#039;] = format(&#039;sandbox-notice-pagetype-other&#039;)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;sandbox-notice-blurb&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-diff-blurb&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-diff-display&#039;]&lt;br /&gt;
-- Either cfg[&#039;sandbox-notice-blurb&#039;] or cfg[&#039;sandbox-notice-diff-blurb&#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[&#039;sandbox-notice-pagetype-template&#039;],&lt;br /&gt;
-- cfg[&#039;sandbox-notice-pagetype-module&#039;] or cfg[&#039;sandbox-notice-pagetype-other&#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[&#039;sandbox-notice-compare-link-display&#039;].&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;sandbox-notice-blurb&#039;] = format(&#039;sandbox-notice-blurb&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-diff-blurb&#039;] = format(&#039;sandbox-notice-diff-blurb&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-compare-link-display&#039;] = format(&#039;sandbox-notice-compare-link-display&#039;)&lt;br /&gt;
-- cfg[&#039;view-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;view&amp;quot; links.&lt;br /&gt;
cfg[&#039;view-link-display&#039;] = &#039;view&#039;&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-blurb&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-link-display&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-run-blurb&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-run-link-display&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-blurb&#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[&#039;sandbox-notice-testcases-link-display&#039;] is the display value for that link.&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-run-blurb&#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[&#039;sandbox-notice-testcases-run-link-display&#039;] is the display value for the link to run the test&lt;br /&gt;
-- cases.&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;sandbox-notice-testcases-blurb&#039;] = format(&#039;sandbox-notice-testcases-blurb&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-testcases-link-display&#039;] = format(&#039;sandbox-notice-testcases-link-display&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-testcases-run-blurb&#039;] = format(&#039;sandbox-notice-testcases-run-blurb&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-testcases-run-link-display&#039;] = format(&#039;sandbox-notice-testcases-run-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-category&#039;]&lt;br /&gt;
-- A category to add to all template sandboxes.&lt;br /&gt;
cfg[&#039;sandbox-category&#039;] = &#039;Template sandboxes&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Start box configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;documentation-icon-wikitext&#039;]&lt;br /&gt;
-- The wikitext for the icon shown at the top of the template.&lt;br /&gt;
cfg[&#039;documentation-icon-wikitext&#039;] = &#039;[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]&#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[&#039;transcluded-from-blurb&#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[&#039;transcluded-from-blurb&#039;] = format(&#039;transcluded-from-blurb&#039;)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;create-module-doc-blurb&#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[&#039;module-preload&#039;] and the&lt;br /&gt;
-- display cfg[&#039;create-link-display&#039;].&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;create-module-doc-blurb&#039;] = format(&#039;create-module-doc-blurb&#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[&#039;experiment-blurb-template&#039;]&lt;br /&gt;
-- cfg[&#039;experiment-blurb-module&#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&#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[&#039;experiment-blurb-template&#039;] and cfg[&#039;experiment-blurb-module&#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[&#039;sandbox-link-display&#039;] (cfg[&#039;sandbox-edit-link-display&#039;] | cfg[&#039;compare-link-display&#039;])&lt;br /&gt;
-- &lt;br /&gt;
-- If the sandbox doesn&#039;t exist, it is in the format:&lt;br /&gt;
--&lt;br /&gt;
--     cfg[&#039;sandbox-link-display&#039;] (cfg[&#039;sandbox-create-link-display&#039;] | cfg[&#039;mirror-link-display&#039;])&lt;br /&gt;
-- &lt;br /&gt;
-- The link for cfg[&#039;sandbox-create-link-display&#039;] link preloads the page with cfg[&#039;template-sandbox-preload&#039;]&lt;br /&gt;
-- or cfg[&#039;module-sandbox-preload&#039;], depending on the current namespace. The link for cfg[&#039;mirror-link-display&#039;]&lt;br /&gt;
-- loads a default edit summary of cfg[&#039;mirror-edit-summary&#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[&#039;testcases-link-display&#039;] (cfg[&#039;testcases-edit-link-display&#039;])&lt;br /&gt;
--&lt;br /&gt;
-- If the test cases page doesn&#039;t exist, it is in the format:&lt;br /&gt;
-- &lt;br /&gt;
--     cfg[&#039;testcases-link-display&#039;] (cfg[&#039;testcases-create-link-display&#039;])&lt;br /&gt;
--&lt;br /&gt;
-- If the test cases page doesn&#039;t exist, the link for cfg[&#039;testcases-create-link-display&#039;] preloads the&lt;br /&gt;
-- page with cfg[&#039;template-testcases-preload&#039;] or cfg[&#039;module-testcases-preload&#039;], depending on the current&lt;br /&gt;
-- namespace.&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;experiment-blurb-template&#039;] = format(&#039;experiment-blurb-template&#039;)&lt;br /&gt;
cfg[&#039;experiment-blurb-module&#039;] = format(&#039;experiment-blurb-module&#039;)&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Sandbox link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-subpage&#039;]&lt;br /&gt;
-- The name of the template subpage typically used for sandboxes.&lt;br /&gt;
cfg[&#039;sandbox-subpage&#039;] = &#039;sandbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;template-sandbox-preload&#039;]&lt;br /&gt;
-- Preload file for template sandbox pages.&lt;br /&gt;
cfg[&#039;template-sandbox-preload&#039;] = &#039;Template:Documentation/preload-sandbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-sandbox-preload&#039;]&lt;br /&gt;
-- Preload file for Lua module sandbox pages.&lt;br /&gt;
cfg[&#039;module-sandbox-preload&#039;] = &#039;Template:Documentation/preload-module-sandbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;sandbox&amp;quot; links.&lt;br /&gt;
cfg[&#039;sandbox-link-display&#039;] = format(&#039;sandbox-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-edit-link-display&#039;]&lt;br /&gt;
-- The text to display for sandbox &amp;quot;edit&amp;quot; links.&lt;br /&gt;
cfg[&#039;sandbox-edit-link-display&#039;] = format(&#039;sandbox-edit-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-create-link-display&#039;]&lt;br /&gt;
-- The text to display for sandbox &amp;quot;create&amp;quot; links.&lt;br /&gt;
cfg[&#039;sandbox-create-link-display&#039;] = format(&#039;sandbox-create-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;compare-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;compare&amp;quot; links.&lt;br /&gt;
cfg[&#039;compare-link-display&#039;] = format(&#039;compare-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;mirror-edit-summary&#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[&#039;mirror-edit-summary&#039;] = &#039;Create sandbox version of $1&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;mirror-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;mirror&amp;quot; links.&lt;br /&gt;
cfg[&#039;mirror-link-display&#039;] = format(&#039;mirror-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;mirror-link-preload&#039;]&lt;br /&gt;
-- The page to preload when a user clicks the &amp;quot;mirror&amp;quot; link.&lt;br /&gt;
cfg[&#039;mirror-link-preload&#039;] = &#039;Template:Documentation/mirror&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test cases link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;testcases-subpage&#039;]&lt;br /&gt;
-- The name of the template subpage typically used for test cases.&lt;br /&gt;
cfg[&#039;testcases-subpage&#039;] = &#039;testcases&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;template-testcases-preload&#039;]&lt;br /&gt;
-- Preload file for template test cases pages.&lt;br /&gt;
cfg[&#039;template-testcases-preload&#039;] = &#039;Template:Documentation/preload-testcases&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-testcases-preload&#039;]&lt;br /&gt;
-- Preload file for Lua module test cases pages.&lt;br /&gt;
cfg[&#039;module-testcases-preload&#039;] = &#039;Template:Documentation/preload-module-testcases&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;testcases-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;testcases&amp;quot; links.&lt;br /&gt;
cfg[&#039;testcases-link-display&#039;] = format(&#039;testcases-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;testcases-edit-link-display&#039;]&lt;br /&gt;
-- The text to display for test cases &amp;quot;edit&amp;quot; links.&lt;br /&gt;
cfg[&#039;testcases-edit-link-display&#039;] = format(&#039;testcases-edit-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;testcases-create-link-display&#039;]&lt;br /&gt;
-- The text to display for test cases &amp;quot;create&amp;quot; links.&lt;br /&gt;
cfg[&#039;testcases-create-link-display&#039;] = format(&#039;testcases-create-link-display&#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[&#039;add-categories-blurb&#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[&#039;doc-link-display&#039;].&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;add-categories-blurb&#039;] = format(&#039;add-categories-blurb&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;doc-link-display&#039;]&lt;br /&gt;
-- The text to display when linking to the /doc subpage.&lt;br /&gt;
cfg[&#039;doc-link-display&#039;] = &#039;/doc&#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[&#039;subpages-blurb&#039;]&lt;br /&gt;
-- The &amp;quot;Subpages of this template&amp;quot; blurb. $1 is a link to the main template&#039;s subpages with a&lt;br /&gt;
-- display value of cfg[&#039;subpages-link-display&#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[&#039;subpages-blurb&#039;] = format(&#039;subpages-blurb&#039;)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;subpages-link-display&#039;]&lt;br /&gt;
-- The text to display for the &amp;quot;subpages of this page&amp;quot; link. $1 is cfg[&#039;template-pagetype&#039;],&lt;br /&gt;
-- cfg[&#039;module-pagetype&#039;] or cfg[&#039;default-pagetype&#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[&#039;subpages-link-display&#039;] = format(&#039;subpages-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;template-pagetype&#039;]&lt;br /&gt;
-- The pagetype to display for template pages.&lt;br /&gt;
cfg[&#039;template-pagetype&#039;] = format(&#039;template-pagetype&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-pagetype&#039;]&lt;br /&gt;
-- The pagetype to display for Lua module pages.&lt;br /&gt;
cfg[&#039;module-pagetype&#039;] = format(&#039;module-pagetype&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;default-pagetype&#039;]&lt;br /&gt;
-- The pagetype to display for pages other than templates or Lua modules.&lt;br /&gt;
cfg[&#039;default-pagetype&#039;] = format(&#039;default-pagetype&#039;)&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Doc link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;doc-subpage&#039;]&lt;br /&gt;
-- The name of the subpage typically used for documentation pages.&lt;br /&gt;
cfg[&#039;doc-subpage&#039;] = &#039;doc&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;file-docpage-preload&#039;]&lt;br /&gt;
-- Preload file for documentation page in the file namespace.&lt;br /&gt;
cfg[&#039;file-docpage-preload&#039;] = &#039;Template:Documentation/preload-filespace&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;docpage-preload&#039;]&lt;br /&gt;
-- Preload file for template documentation pages in all namespaces.&lt;br /&gt;
cfg[&#039;docpage-preload&#039;] = &#039;Template:Documentation/preload&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-preload&#039;]&lt;br /&gt;
-- Preload file for Lua module documentation pages.&lt;br /&gt;
cfg[&#039;module-preload&#039;] = &#039;Template:Documentation/preload-module-doc&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Print version configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;print-subpage&#039;]&lt;br /&gt;
-- The name of the template subpage used for print versions.&lt;br /&gt;
cfg[&#039;print-subpage&#039;] = &#039;Print&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;print-link-display&#039;]&lt;br /&gt;
-- The text to display when linking to the /Print subpage.&lt;br /&gt;
cfg[&#039;print-link-display&#039;] = &#039;/Print&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;print-blurb&#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[&#039;print-link-display&#039;].&lt;br /&gt;
cfg[&#039;print-blurb&#039;] = format(&#039;print-blurb&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;display-print-category&#039;]&lt;br /&gt;
-- Set to true to enable output of cfg[&#039;print-category&#039;] if a /Print subpage exists.&lt;br /&gt;
-- This should be a boolean value (either true or false).&lt;br /&gt;
cfg[&#039;display-print-category&#039;] = true&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;print-category&#039;]&lt;br /&gt;
-- Category to output if cfg[&#039;display-print-category&#039;] is set to true, and a /Print subpage exists.&lt;br /&gt;
cfg[&#039;print-category&#039;] = &#039;Templates with print versions&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- HTML and CSS configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;main-div-id&#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[&#039;main-div-id&#039;] = &#039;template-documentation&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;main-div-classes&#039;]&lt;br /&gt;
-- The CSS classes added to the main HTML &amp;quot;div&amp;quot; tag.&lt;br /&gt;
cfg[&#039;main-div-class&#039;] = &#039;ts-doc-doc&#039;&lt;br /&gt;
cfg[&#039;header-div-class&#039;] = &#039;ts-doc-header&#039;&lt;br /&gt;
cfg[&#039;heading-div-class&#039;] = &#039;ts-doc-heading&#039;&lt;br /&gt;
cfg[&#039;content-div-class&#039;] = &#039;ts-doc-content&#039;&lt;br /&gt;
cfg[&#039;footer-div-class&#039;] = &#039;ts-doc-footer plainlinks&#039;&lt;br /&gt;
&lt;br /&gt;
cfg[&#039;sandbox-class&#039;] = &#039;ts-doc-sandbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;start-box-linkclasses&#039;]&lt;br /&gt;
-- The CSS classes used for the [view][edit][history] or [create] links in the start box.&lt;br /&gt;
cfg[&#039;start-box-linkclasses&#039;] = &#039;ts-tlinks-tlinks mw-editsection-like plainlinks&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;start-box-link-id&#039;]&lt;br /&gt;
-- The HTML &amp;quot;id&amp;quot; attribute for the links in the start box.&lt;br /&gt;
cfg[&#039;start-box-link-id&#039;] = &#039;doc_editlinks&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Tracking category configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;display-strange-usage-category&#039;]&lt;br /&gt;
-- Set to true to enable output of cfg[&#039;strange-usage-category&#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[&#039;display-strange-usage-category&#039;] = true&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;strange-usage-category&#039;]&lt;br /&gt;
-- Category to output if cfg[&#039;display-strange-usage-category&#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[&#039;strange-usage-category&#039;] = &#039;Wikipedia pages with strange ((documentation)) usage&#039;&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- End configuration&lt;br /&gt;
--&lt;br /&gt;
-- Don&#039;t edit anything below this line.&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
return cfg&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Arguments&amp;diff=316</id>
		<title>Module:Arguments</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Arguments&amp;diff=316"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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(&#039;libraryUtil&#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&#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) == &#039;string&#039; then&lt;br /&gt;
		val = val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if val == &#039;&#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) == &#039;string&#039; then&lt;br /&gt;
		return val:match(&#039;^%s*(.-)%s*$&#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) == &#039;string&#039; then&lt;br /&gt;
		if val:find(&#039;%S&#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 == &#039;string&#039; or tp == &#039;number&#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(&#039;getArgs&#039;, 1, frame, &#039;table&#039;, true)&lt;br /&gt;
	checkType(&#039;getArgs&#039;, 2, options, &#039;table&#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&#039;s availability. If we weren&#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) == &#039;table&#039; and type(frame.getParent) == &#039;function&#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&#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(&#039;/sandbox$&#039;, &#039;&#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) == &#039;table&#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&#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&#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) ~= &#039;function&#039; then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option &#039;valueFunc&#039;&amp;quot;&lt;br /&gt;
					.. &#039;(function expected, got &#039;&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. &#039;)&#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 &#039;s&#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] ~= &#039;h&#039; then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = &#039;s&#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) == &#039;string&#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] = &#039;h&#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) == &#039;string&#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;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; the table is read-only&#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;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; overwriting existing arguments is not permitted&#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&#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] = &#039;h&#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) ~= &#039;string&#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&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Documentation&amp;diff=314</id>
		<title>Module:Documentation</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Documentation&amp;diff=314"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{documentation}}.&lt;br /&gt;
&lt;br /&gt;
-- Get required modules.&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
-- Get the config table.&lt;br /&gt;
local cfg = mw.loadData(&#039;Module:Documentation/config&#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 &#039;string&#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 &#039;Foo $2 bar $1.&#039;,&lt;br /&gt;
	-- message(&#039;foo-message&#039;, {&#039;baz&#039;, &#039;qux&#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 &#039;string&#039;&lt;br /&gt;
	if type(msg) ~= expectType then&lt;br /&gt;
		error(&#039;message: type error in message cfg.&#039; .. cfgKey .. &#039; (&#039; .. expectType .. &#039; expected, got &#039; .. type(msg) .. &#039;)&#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(&#039;message: no value found for key $&#039; .. match .. &#039; in message cfg.&#039; .. cfgKey, 4)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ugsub(msg, &#039;$([1-9][0-9]*)&#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(&#039;[[%s|%s]]&#039;, page, display)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.ustring.format(&#039;[[%s]]&#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 .. &#039;:&#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(&#039;[%s %s]&#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(&#039;#&#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;
	-- &#039;documentation-toolbar&#039;&lt;br /&gt;
	return &#039;&amp;lt;span class=&amp;quot;&#039; .. message(&#039;toolbar-class&#039;) .. &#039;&amp;quot;&amp;gt;(&#039;&lt;br /&gt;
		.. table.concat(ret, &#039; &amp;amp;#124; &#039;) .. &#039;)&amp;lt;/span&amp;gt;&#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) == &#039;string&#039; then&lt;br /&gt;
					value = value:match(&#039;^%s*(.-)%s*$&#039;) -- Remove whitespace.&lt;br /&gt;
					if key == &#039;heading&#039; or value ~= &#039;&#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 == &#039;testcases&#039; then&lt;br /&gt;
		return frame:expandTemplate{title = &#039;module test cases notice&#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(&#039;_main&#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(&#039;div&#039;)&lt;br /&gt;
			-- &#039;documentation-container&#039;&lt;br /&gt;
			:addClass(message(&#039;container&#039;))&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;complementary&#039;)&lt;br /&gt;
			:attr(&#039;aria-labelledby&#039;, args.heading ~= &#039;&#039; and &#039;documentation-heading&#039; or nil)&lt;br /&gt;
			:attr(&#039;aria-label&#039;, args.heading == &#039;&#039; and &#039;Documentation&#039; or nil)&lt;br /&gt;
			:newline()&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				-- &#039;documentation&#039;&lt;br /&gt;
				:addClass(message(&#039;main-div-classes&#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(&#039;div&#039;)&lt;br /&gt;
					-- &#039;documentation-clear&#039;&lt;br /&gt;
					:addClass(message(&#039;clear&#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;
	-- &#039;Module:Documentation/styles.css&#039;&lt;br /&gt;
	return mw.getCurrentFrame():extensionTag (&lt;br /&gt;
		&#039;templatestyles&#039;, &#039;&#039;, {src=cfg[&#039;templatestyles&#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&#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&#039;t call any of the functions&lt;br /&gt;
	-- more than once. (Nils won&#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;
		-- &#039;sandbox-subpage&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
		-- &#039;testcases-subpage&#039; --&amp;gt; &#039;testcases&#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(&#039;sandbox-subpage&#039;) or subpage == message(&#039;testcases-subpage&#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;
		-- &#039;doc-subpage&#039; --&amp;gt; &#039;doc&#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 .. &#039;/&#039; .. message(&#039;doc-subpage&#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;
		-- &#039;sandbox-subpage&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		return mw.title.new(env.docpageBase .. &#039;/&#039; .. message(&#039;sandbox-subpage&#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;
		-- &#039;testcases-subpage&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		return mw.title.new(env.docpageBase .. &#039;/&#039; .. message(&#039;testcases-subpage&#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 .. &#039;:&#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;
				&#039;Special:ComparePages&#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(&#039;_startBox&#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;
	-- &#039;view-link-display&#039; --&amp;gt; &#039;view&#039;&lt;br /&gt;
	-- &#039;edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;history-link-display&#039; --&amp;gt; &#039;history&#039;&lt;br /&gt;
	-- &#039;purge-link-display&#039; --&amp;gt; &#039;purge&#039;&lt;br /&gt;
	-- &#039;module-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-doc&#039;&lt;br /&gt;
	-- &#039;docpage-preload&#039; --&amp;gt; &#039;Template:Documentation/preload&#039;&lt;br /&gt;
	-- &#039;create-link-display&#039; --&amp;gt; &#039;create&#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(&#039;view-link-display&#039;)&lt;br /&gt;
	data.editLinkDisplay = message(&#039;edit-link-display&#039;)&lt;br /&gt;
	data.historyLinkDisplay = message(&#039;history-link-display&#039;)&lt;br /&gt;
	data.purgeLinkDisplay = message(&#039;purge-link-display&#039;)&lt;br /&gt;
	-- Create link if /doc doesn&#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(&#039;module-preload&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			preload = message(&#039;docpage-preload&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	data.preload = preload&lt;br /&gt;
	data.createLinkDisplay = message(&#039;create-link-display&#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(&#039;%[&#039;, &#039;&amp;amp;#91;&#039;) -- Replace square brackets with HTML entities.&lt;br /&gt;
		s = s:gsub(&#039;%]&#039;, &#039;&amp;amp;#93;&#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 = &#039;purge&#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 = &#039;edit&#039;}, data.editLinkDisplay)&lt;br /&gt;
		local historyLink = makeUrlLink(docTitle:fullUrl{action = &#039;history&#039;}, data.historyLinkDisplay)&lt;br /&gt;
		ret = &#039;[%s] [%s] [%s] [%s]&#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 = &#039;edit&#039;, preload = data.preload}, data.createLinkDisplay)&lt;br /&gt;
		ret = &#039;[%s] [%s]&#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&#039;s an error.&lt;br /&gt;
	--&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;documentation-icon-wikitext&#039; --&amp;gt; &#039;[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]&#039;&lt;br /&gt;
	-- &#039;template-namespace-heading&#039; --&amp;gt; &#039;Template documentation&#039;&lt;br /&gt;
	-- &#039;module-namespace-heading&#039; --&amp;gt; &#039;Module documentation&#039;&lt;br /&gt;
	-- &#039;file-namespace-heading&#039; --&amp;gt; &#039;Summary&#039;&lt;br /&gt;
	-- &#039;other-namespaces-heading&#039; --&amp;gt; &#039;Documentation&#039;&lt;br /&gt;
	-- &#039;testcases-create-link-display&#039; --&amp;gt; &#039;create&#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 == &#039;&#039; then&lt;br /&gt;
		-- Don&#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(&#039;documentation-icon-wikitext&#039;) .. &#039; &#039; .. message(&#039;template-namespace-heading&#039;)&lt;br /&gt;
	elseif subjectSpace == 828 then -- Module namespace&lt;br /&gt;
		data.heading = message(&#039;documentation-icon-wikitext&#039;) .. &#039; &#039; .. message(&#039;module-namespace-heading&#039;)&lt;br /&gt;
	elseif subjectSpace == 6 then -- File namespace&lt;br /&gt;
		data.heading = message(&#039;file-namespace-heading&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		data.heading = message(&#039;other-namespaces-heading&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Heading CSS&lt;br /&gt;
	local headingStyle = args[&#039;heading-style&#039;]&lt;br /&gt;
	if headingStyle then&lt;br /&gt;
		data.headingStyleText = headingStyle&lt;br /&gt;
	else&lt;br /&gt;
		-- &#039;documentation-heading&#039;&lt;br /&gt;
		data.headingClass = message(&#039;main-div-heading-class&#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;
		-- &#039;mw-editsection-like plainlinks&#039;&lt;br /&gt;
		data.linksClass = message(&#039;start-box-link-classes&#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(&#039;div&#039;)&lt;br /&gt;
	sbox&lt;br /&gt;
		-- &#039;documentation-startbox&#039;&lt;br /&gt;
		:addClass(message(&#039;start-box-class&#039;))&lt;br /&gt;
		:newline()&lt;br /&gt;
		:tag(&#039;span&#039;)&lt;br /&gt;
			:addClass(data.headingClass)&lt;br /&gt;
			:attr(&#039;id&#039;, &#039;documentation-heading&#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(&#039;span&#039;)&lt;br /&gt;
			:addClass(data.linksClass)&lt;br /&gt;
			:attr(&#039;id&#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(&#039;_content&#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 &#039;&#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 &#039;\n&#039; .. (content or &#039;&#039;) .. &#039;\n&#039; &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.contentTitle = makeInvokeFunc(&#039;_contentTitle&#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 &#039;&#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(&#039;_endBox&#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[&#039;link box&#039;]&lt;br /&gt;
	if linkBox == &#039;off&#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 = &#039;&#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 &#039;&#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&#039;s sandbox and testcases pages.&amp;quot;&lt;br /&gt;
			text = text .. (p.makeExperimentBlurb(args, env) or &#039;&#039;) .. &#039;&amp;lt;br /&amp;gt;&#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&#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 &#039;&#039;)&lt;br /&gt;
			end&lt;br /&gt;
			text = text .. &#039; &#039; .. (p.makeSubpagesBlurb(args, env) or &#039;&#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(&#039;div&#039;)&lt;br /&gt;
	-- &#039;documentation-metadata&#039;&lt;br /&gt;
	box:attr(&#039;role&#039;, &#039;note&#039;)&lt;br /&gt;
		:addClass(message(&#039;end-box-class&#039;))&lt;br /&gt;
		-- &#039;plainlinks&#039;&lt;br /&gt;
		:addClass(message(&#039;end-box-plainlinks&#039;))&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
		:done()&lt;br /&gt;
&lt;br /&gt;
	return &#039;\n&#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;
	-- &#039;edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;history-link-display&#039; --&amp;gt; &#039;history&#039;&lt;br /&gt;
	-- &#039;transcluded-from-blurb&#039; --&amp;gt; &lt;br /&gt;
	-- &#039;The above [[Wikipedia:Template documentation|documentation]] &lt;br /&gt;
	-- is [[Help:Transclusion|transcluded]] from $1.&#039;&lt;br /&gt;
	-- &#039;module-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-doc&#039;&lt;br /&gt;
	-- &#039;create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	-- &#039;create-module-doc-blurb&#039; --&amp;gt;&lt;br /&gt;
	-- &#039;You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].&#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 = &#039;edit&#039;}&lt;br /&gt;
		local editDisplay = message(&#039;edit-link-display&#039;)&lt;br /&gt;
		local editLink = makeUrlLink(editUrl, editDisplay)&lt;br /&gt;
		local historyUrl = docTitle:fullUrl{action = &#039;history&#039;}&lt;br /&gt;
		local historyDisplay = message(&#039;history-link-display&#039;)&lt;br /&gt;
		local historyLink = makeUrlLink(historyUrl, historyDisplay)&lt;br /&gt;
		ret = message(&#039;transcluded-from-blurb&#039;, {docLink})&lt;br /&gt;
			.. &#039; &#039;&lt;br /&gt;
			.. makeToolbar(editLink, historyLink)&lt;br /&gt;
			.. &#039;&amp;lt;br /&amp;gt;&#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 = &#039;edit&#039;, preload = message(&#039;module-preload&#039;)}&lt;br /&gt;
		local createDisplay = message(&#039;create-link-display&#039;)&lt;br /&gt;
		local createLink = makeUrlLink(createUrl, createDisplay)&lt;br /&gt;
		ret = message(&#039;create-module-doc-blurb&#039;, {createLink})&lt;br /&gt;
			.. &#039;&amp;lt;br /&amp;gt;&#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&#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;
	-- &#039;sandbox-link-display&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
	-- &#039;sandbox-edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;compare-link-display&#039; --&amp;gt; &#039;diff&#039;&lt;br /&gt;
	-- &#039;module-sandbox-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-sandbox&#039;&lt;br /&gt;
	-- &#039;template-sandbox-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-sandbox&#039;&lt;br /&gt;
	-- &#039;sandbox-create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	-- &#039;mirror-edit-summary&#039; --&amp;gt; &#039;Create sandbox version of $1&#039;&lt;br /&gt;
	-- &#039;mirror-link-display&#039; --&amp;gt; &#039;mirror&#039;&lt;br /&gt;
	-- &#039;mirror-link-preload&#039; --&amp;gt; &#039;Template:Documentation/mirror&#039;&lt;br /&gt;
	-- &#039;sandbox-link-display&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
	-- &#039;testcases-link-display&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
	-- &#039;testcases-edit-link-display&#039;--&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;template-sandbox-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-sandbox&#039;&lt;br /&gt;
	-- &#039;testcases-create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	-- &#039;testcases-link-display&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
	-- &#039;testcases-edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;module-testcases-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-testcases&#039;&lt;br /&gt;
	-- &#039;template-testcases-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-testcases&#039;&lt;br /&gt;
	-- &#039;experiment-blurb-module&#039; --&amp;gt; &#039;Editors can experiment in this module&#039;s $1 and $2 pages.&#039;&lt;br /&gt;
	-- &#039;experiment-blurb-template&#039; --&amp;gt; &#039;Editors can experiment in this template&#039;s $1 and $2 pages.&#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(&#039;sandbox-link-display&#039;)&lt;br /&gt;
		local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)&lt;br /&gt;
		local sandboxEditUrl = sandboxTitle:fullUrl{action = &#039;edit&#039;}&lt;br /&gt;
		local sandboxEditDisplay = message(&#039;sandbox-edit-link-display&#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(&#039;compare-link-display&#039;)&lt;br /&gt;
			compareLink = makeUrlLink(compareUrl, compareDisplay)&lt;br /&gt;
		end&lt;br /&gt;
		sandboxLinks = sandboxLink .. &#039; &#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(&#039;module-sandbox-preload&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			sandboxPreload = message(&#039;template-sandbox-preload&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		local sandboxCreateUrl = sandboxTitle:fullUrl{action = &#039;edit&#039;, preload = sandboxPreload}&lt;br /&gt;
		local sandboxCreateDisplay = message(&#039;sandbox-create-link-display&#039;)&lt;br /&gt;
		local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)&lt;br /&gt;
		local mirrorSummary = message(&#039;mirror-edit-summary&#039;, {makeWikilink(templatePage)})&lt;br /&gt;
		local mirrorPreload = message(&#039;mirror-link-preload&#039;)&lt;br /&gt;
		local mirrorUrl = sandboxTitle:fullUrl{action = &#039;edit&#039;, preload = mirrorPreload, summary = mirrorSummary}&lt;br /&gt;
		if subjectSpace == 828 then&lt;br /&gt;
			mirrorUrl = sandboxTitle:fullUrl{action = &#039;edit&#039;, preload = templateTitle.prefixedText, summary = mirrorSummary}&lt;br /&gt;
		end&lt;br /&gt;
		local mirrorDisplay = message(&#039;mirror-link-display&#039;)&lt;br /&gt;
		local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)&lt;br /&gt;
		sandboxLinks = message(&#039;sandbox-link-display&#039;) .. &#039; &#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(&#039;testcases-link-display&#039;)&lt;br /&gt;
		local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)&lt;br /&gt;
		local testcasesEditUrl = testcasesTitle:fullUrl{action = &#039;edit&#039;}&lt;br /&gt;
		local testcasesEditDisplay = message(&#039;testcases-edit-link-display&#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(&#039;testcases-run-link-display&#039;)&lt;br /&gt;
			local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)&lt;br /&gt;
			testcasesLinks = testcasesLink .. &#039; &#039; .. makeToolbar(testcasesEditLink, testcasesRunLink)&lt;br /&gt;
		else&lt;br /&gt;
			testcasesLinks = testcasesLink .. &#039; &#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(&#039;module-testcases-preload&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			testcasesPreload = message(&#039;template-testcases-preload&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		local testcasesCreateUrl = testcasesTitle:fullUrl{action = &#039;edit&#039;, preload = testcasesPreload}&lt;br /&gt;
		local testcasesCreateDisplay = message(&#039;testcases-create-link-display&#039;)&lt;br /&gt;
		local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)&lt;br /&gt;
		testcasesLinks = message(&#039;testcases-link-display&#039;) .. &#039; &#039; .. makeToolbar(testcasesCreateLink)&lt;br /&gt;
	end&lt;br /&gt;
	local messageName&lt;br /&gt;
	if subjectSpace == 828 then&lt;br /&gt;
		messageName = &#039;experiment-blurb-module&#039;&lt;br /&gt;
	else&lt;br /&gt;
		messageName = &#039;experiment-blurb-template&#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;
	-- &#039;doc-link-display&#039; --&amp;gt; &#039;/doc&#039;&lt;br /&gt;
	-- &#039;add-categories-blurb&#039; --&amp;gt; &#039;Please add categories to the $1 subpage.&#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(&#039;doc-link-display&#039;))&lt;br /&gt;
	return message(&#039;add-categories-blurb&#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;
	-- &#039;template-pagetype&#039; --&amp;gt; &#039;template&#039;&lt;br /&gt;
	-- &#039;module-pagetype&#039; --&amp;gt; &#039;module&#039;&lt;br /&gt;
	-- &#039;default-pagetype&#039; --&amp;gt; &#039;page&#039;&lt;br /&gt;
	-- &#039;subpages-link-display&#039; --&amp;gt; &#039;Subpages of this $1&#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(&#039;template-pagetype&#039;)&lt;br /&gt;
	elseif subjectSpace == 828 then&lt;br /&gt;
		pagetype = message(&#039;module-pagetype&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		pagetype = message(&#039;default-pagetype&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local subpagesLink = makeWikilink(&lt;br /&gt;
		&#039;Special:PrefixIndex/&#039; .. templateTitle.prefixedText .. &#039;/&#039;,&lt;br /&gt;
		message(&#039;subpages-link-display&#039;, {pagetype})&lt;br /&gt;
	)&lt;br /&gt;
	return message(&#039;subpages-blurb&#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;
	-- &#039;display-strange-usage-category&#039; --&amp;gt; true&lt;br /&gt;
	-- &#039;doc-subpage&#039; --&amp;gt; &#039;doc&#039;&lt;br /&gt;
	-- &#039;testcases-subpage&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
	-- &#039;strange-usage-category&#039; --&amp;gt; &#039;Wikipedia pages with strange ((documentation)) usage&#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 = &#039;&#039;&lt;br /&gt;
	if message(&#039;display-strange-usage-category&#039;, nil, &#039;boolean&#039;)&lt;br /&gt;
		and (&lt;br /&gt;
			subpage == message(&#039;doc-subpage&#039;)&lt;br /&gt;
			or subjectSpace ~= 828 and subpage == message(&#039;testcases-subpage&#039;)&lt;br /&gt;
		)&lt;br /&gt;
	then&lt;br /&gt;
		ret = ret .. makeCategoryLink(message(&#039;strange-usage-category&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Module:Message_box&amp;diff=312</id>
		<title>Module:Message box</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Module:Message_box&amp;diff=312"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;strict&#039;)&lt;br /&gt;
local getArgs&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
local lang = mw.language.getContentLanguage()&lt;br /&gt;
&lt;br /&gt;
local CONFIG_MODULE = &#039;Module:Message box/configuration&#039;&lt;br /&gt;
local DEMOSPACES = {talk = &#039;tmbox&#039;, image = &#039;imbox&#039;, file = &#039;imbox&#039;, category = &#039;cmbox&#039;, article = &#039;ambox&#039;, main = &#039;ambox&#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), &#039;^&#039; .. prefix .. &#039;([1-9]%d*)$&#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 ~= &#039;&#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, &#039;talk&#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 ~= &#039;&#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(&#039;[[Category:%s|%s]]&#039;, cat, sort)&lt;br /&gt;
	else&lt;br /&gt;
		cat = string.format(&#039;[[Category:%s]]&#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 == &#039;SUBST&#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(&#039;box-&#039; .. string.gsub(self.name,&#039; &#039;,&#039;_&#039;))&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.plainlinks) ~= false then&lt;br /&gt;
		self:addClass(&#039;plainlinks&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if self.below then&lt;br /&gt;
		self:addClass(&#039;mbox-with-below&#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 &#039;mbox-small&#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;
				&#039;^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$&#039;&lt;br /&gt;
			) or self.name&lt;br /&gt;
			templateName = &#039;Template:&#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 == &#039;&#039; then&lt;br /&gt;
				sect = &#039;This &#039; .. (cfg.sectionDefault or &#039;page&#039;)&lt;br /&gt;
			elseif type(args.sect) == &#039;string&#039; then&lt;br /&gt;
				sect = &#039;This &#039; .. args.sect&lt;br /&gt;
			end&lt;br /&gt;
			local issue = args.issue&lt;br /&gt;
			issue = type(issue) == &#039;string&#039; and issue ~= &#039;&#039; and issue or nil&lt;br /&gt;
			local text = args.text&lt;br /&gt;
			text = type(text) == &#039;string&#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, &#039; &#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 == &#039;&#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 = &#039;#&#039;&lt;br /&gt;
		elseif talk == &#039;&#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&#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 == &#039;#&#039; and &#039;&#039; or &#039;#&#039;) .. talk)&lt;br /&gt;
                    talkText = string.format(&#039;([[%s|talk]])&#039;, talkLink)&lt;br /&gt;
                else&lt;br /&gt;
                    talkText = &#039;Relevant discussion may be found on&#039;&lt;br /&gt;
                    if talkArgIsTalkPage then&lt;br /&gt;
                        talkText = string.format(&lt;br /&gt;
                            &#039;%s [[%s|%s]].&#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;
                            &#039;%s the [[%s&#039; .. (talk == &#039;#&#039; and &#039;&#039; or &#039;#&#039;) .. &#039;%s|talk page]].&#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 ~= &#039;&#039; and args.fix or nil&lt;br /&gt;
		local date&lt;br /&gt;
		if args.date and args.date ~= &#039;&#039; then&lt;br /&gt;
			date = args.date&lt;br /&gt;
		elseif args.date == &#039;&#039; and self.isTemplatePage then&lt;br /&gt;
			date = lang:formatDate(&#039;F Y&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if date then&lt;br /&gt;
			self.date = string.format(&amp;quot; &amp;lt;span class=&#039;date-container&#039;&amp;gt;&amp;lt;i&amp;gt;(&amp;lt;span class=&#039;date&#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 ~= &#039;blank&#039; and imageLeft ~= &#039;none&#039;&lt;br /&gt;
		or not cfg.imageCheckBlank and imageLeft ~= &#039;none&#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 &#039;30x30px&#039;)&lt;br /&gt;
				or &#039;40x40px&#039;&lt;br /&gt;
			self.imageLeft = string.format(&#039;[[File:%s|%s%s|alt=]]&#039;, self.typeImage&lt;br /&gt;
				or &#039;Information icon4.svg&#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 == &#039;none&#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{&#039;cat&#039;, &#039;category&#039;, &#039;all&#039;} do&lt;br /&gt;
		args[prefix .. &#039;1&#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) == &#039;string&#039; and date&lt;br /&gt;
	local preposition = &#039;from&#039;&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		local mainCat = args[&#039;cat&#039; .. tostring(num)]&lt;br /&gt;
			or args[&#039;category&#039; .. tostring(num)]&lt;br /&gt;
		local allCat = args[&#039;all&#039; .. tostring(num)]&lt;br /&gt;
		mainCat = type(mainCat) == &#039;string&#039; and mainCat&lt;br /&gt;
		allCat = type(allCat) == &#039;string&#039; and allCat&lt;br /&gt;
		if mainCat and date and date ~= &#039;&#039; then&lt;br /&gt;
			local catTitle = string.format(&#039;%s %s %s&#039;, mainCat, preposition, date)&lt;br /&gt;
			self:addCat(0, catTitle)&lt;br /&gt;
			catTitle = getTitleObject(&#039;Category:&#039; .. catTitle)&lt;br /&gt;
			if not catTitle or not catTitle.exists then&lt;br /&gt;
				self:addCat(0, &#039;Articles with invalid date parameter in template&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		elseif mainCat and (not date or date == &#039;&#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 = &#039;C&#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 &#039;Main:&#039; or &#039;&#039;) .. self.title.prefixedText&lt;br /&gt;
		self:addCat(&#039;all&#039;, &#039;Wikipedia message box parameter needs fixing&#039;, allSort)&lt;br /&gt;
	end&lt;br /&gt;
	if self.isSubstituted then&lt;br /&gt;
		self:addCat(&#039;all&#039;, &#039;Pages with incorrectly substituted templates&#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(&#039;Module:Category handler&#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(&#039;b&#039;)&lt;br /&gt;
			:addClass(&#039;error&#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&#039;Template &amp;lt;code&amp;gt;%s[[Template:%s|%s]]%s&amp;lt;/code&amp;gt; has been incorrectly substituted.&#039;,&lt;br /&gt;
				mw.text.nowiki(&#039;{{&#039;), self.name, self.name, mw.text.nowiki(&#039;}}&#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 = &#039;templatestyles&#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&#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 = &#039;templatestyles&#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(&#039;div&#039;)&lt;br /&gt;
	mbox:attr(&#039;id&#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(&#039;div&#039;)&lt;br /&gt;
		flex_container:addClass(&#039;mbox-flex&#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(&#039;div&#039;):addClass(&#039;mbox-image&#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(&#039;div&#039;):addClass(&#039;mbox-text&#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(&#039;div&#039;)&lt;br /&gt;
		textCellDiv&lt;br /&gt;
			:addClass(&#039;mbox-text-span&#039;)&lt;br /&gt;
			:wikitext(self.issue or nil)&lt;br /&gt;
		if (self.talk or self.fix) then&lt;br /&gt;
			textCellDiv:tag(&#039;span&#039;)&lt;br /&gt;
				:addClass(&#039;hide-when-compact&#039;)&lt;br /&gt;
				:wikitext(self.talk and (&#039; &#039; .. self.talk) or nil)&lt;br /&gt;
				:wikitext(self.fix and (&#039; &#039; .. self.fix) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		textCellDiv:wikitext(self.date and (&#039; &#039; .. self.date) or nil)&lt;br /&gt;
		if self.info and not self.isSmall then&lt;br /&gt;
			textCellDiv&lt;br /&gt;
				:tag(&#039;span&#039;)&lt;br /&gt;
				:addClass(&#039;hide-when-compact&#039;)&lt;br /&gt;
				:wikitext(self.info and (&#039; &#039; .. self.info) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		if self.removalNotice then&lt;br /&gt;
			textCellDiv:tag(&#039;span&#039;)&lt;br /&gt;
				:addClass(&#039;hide-when-compact&#039;)&lt;br /&gt;
				:tag(&#039;i&#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(&#039;div&#039;):addClass(&#039;mbox-imageright&#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(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;mbox-text mbox-below&#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(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;mbox-invalid-type&#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&#039;This message box is using an invalid &amp;quot;type=%s&amp;quot; parameter and needs fixing.&#039;,&lt;br /&gt;
				self.type or &#039;&#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(&#039;b&#039;)&lt;br /&gt;
			:addClass(&#039;error&#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&#039;Template &amp;lt;code&amp;gt;%s[[Template:%s|%s]]%s&amp;lt;/code&amp;gt; has been incorrectly substituted.&#039;,&lt;br /&gt;
				mw.text.nowiki(&#039;{{&#039;), self.name, self.name, mw.text.nowiki(&#039;}}&#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 = &#039;templatestyles&#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&#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 = &#039;templatestyles&#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(&#039;table&#039;)&lt;br /&gt;
	boxTable:attr(&#039;id&#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(&#039;role&#039;, &#039;presentation&#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(&#039;tr&#039;)&lt;br /&gt;
	if self.imageLeft then&lt;br /&gt;
		local imageLeftCell = row:tag(&#039;td&#039;):addClass(&#039;mbox-image&#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(&#039;div&#039;):addClass(&#039;mbox-image-div&#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&#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(&#039;td&#039;)&lt;br /&gt;
			:addClass(&#039;mbox-empty-cell&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the text.&lt;br /&gt;
	local textCell = row:tag(&#039;td&#039;):addClass(&#039;mbox-text&#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(&#039;div&#039;)&lt;br /&gt;
		textCellDiv&lt;br /&gt;
			:addClass(&#039;mbox-text-span&#039;)&lt;br /&gt;
			:wikitext(self.issue or nil)&lt;br /&gt;
		if (self.talk or self.fix) then&lt;br /&gt;
			textCellDiv:tag(&#039;span&#039;)&lt;br /&gt;
				:addClass(&#039;hide-when-compact&#039;)&lt;br /&gt;
				:wikitext(self.talk and (&#039; &#039; .. self.talk) or nil)&lt;br /&gt;
				:wikitext(self.fix and (&#039; &#039; .. self.fix) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		textCellDiv:wikitext(self.date and (&#039; &#039; .. self.date) or nil)&lt;br /&gt;
		if self.info and not self.isSmall then&lt;br /&gt;
			textCellDiv&lt;br /&gt;
				:tag(&#039;span&#039;)&lt;br /&gt;
				:addClass(&#039;hide-when-compact&#039;)&lt;br /&gt;
				:wikitext(self.info and (&#039; &#039; .. self.info) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		if self.removalNotice then&lt;br /&gt;
			textCellDiv:tag(&#039;span&#039;)&lt;br /&gt;
				:addClass(&#039;hide-when-compact&#039;)&lt;br /&gt;
				:tag(&#039;i&#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(&#039;td&#039;):addClass(&#039;mbox-imageright&#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(&#039;div&#039;):addClass(&#039;mbox-image-div&#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(&#039;tr&#039;)&lt;br /&gt;
			:tag(&#039;td&#039;)&lt;br /&gt;
				:attr(&#039;colspan&#039;, self.imageRight and &#039;3&#039; or &#039;2&#039;)&lt;br /&gt;
				:addClass(&#039;mbox-text&#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(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;mbox-invalid-type&#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&#039;This message box is using an invalid &amp;quot;type=%s&amp;quot; parameter and needs fixing.&#039;,&lt;br /&gt;
				self.type or &#039;&#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(&#039;Module:Arguments&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:Yesno-no&amp;diff=310</id>
		<title>Template:Yesno-no</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:Yesno-no&amp;diff=310"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:Yesno&amp;diff=308</id>
		<title>Template:Yesno</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:Yesno&amp;diff=308"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:Weather_Color&amp;diff=306</id>
		<title>Template:Weather Color</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:Weather_Color&amp;diff=306"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:Weapon_Color&amp;diff=304</id>
		<title>Template:Weapon Color</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:Weapon_Color&amp;diff=304"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:WIP&amp;diff=302</id>
		<title>Template:WIP</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:WIP&amp;diff=302"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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 &#039;&#039;&#039;[[User:{{{user}}}|{{{user}}}]]&#039;&#039;&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:View&amp;diff=300</id>
		<title>Template:View</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:View&amp;diff=300"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:Userbox&amp;diff=298</id>
		<title>Template:Userbox</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:Userbox&amp;diff=298"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:userbox|userbox}}&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:Underlinked&amp;diff=296</id>
		<title>Template:Underlinked</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:Underlinked&amp;diff=296"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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}}} &#039;&#039;&#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]]&#039;&#039;&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:Under_Construction&amp;diff=294</id>
		<title>Template:Under Construction</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:Under_Construction&amp;diff=294"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:Tyler_Navbox&amp;diff=292</id>
		<title>Template:Tyler Navbox</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:Tyler_Navbox&amp;diff=292"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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&#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&#039;s Good]] • [[Gone, Gone / Thank You]] • [[I Don&#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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:Tribecolor&amp;diff=290</id>
		<title>Template:Tribecolor</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:Tribecolor&amp;diff=290"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;background:#{{#switch: {{{1|}}}&lt;br /&gt;
&amp;lt;!-- Convention: Miscellaneous, then United States, then other anglophone versions in alphabetical order, then Sweden, then other allophone versions in alphabetical order, then unofficial seasons in alphabetical order. For crossover seasons, place the code under the version higher up the page. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Miscellaneous --&amp;gt;&lt;br /&gt;
|tie=DCDCDC; color:black&amp;lt;!-- To be used for ties and null votes at Tribal Council. --&amp;gt; &lt;br /&gt;
|prod|jury=E9E9E9; color:black&amp;lt;!-- To be used to quote Jeff Probst, medical stuff, production, etc. --&amp;gt;&lt;br /&gt;
|status=808080; color:white&amp;lt;!-- To be used for medevacs, quits, etc. --&amp;gt;&lt;br /&gt;
|none=999999; color:white&lt;br /&gt;
|nominated=36454F; color:white&amp;lt;!-- To be used in international versions in which castaways are nominated via votes. --&amp;gt; &lt;br /&gt;
|eliminated|out=a6a6a6&amp;lt;!-- rgb(166, 166, 166)--&amp;gt;; border:none&lt;br /&gt;
|eliminated2|out2|inactive=a6a6a6&amp;lt;!-- rgb(166, 166, 166)--&amp;gt;&lt;br /&gt;
|copper|3rd=B87333; color:white&lt;br /&gt;
|gold|1st=D4AF37; color:black&lt;br /&gt;
|silver|2nd=C0C0C0; color:black&lt;br /&gt;
|n/a|N/A=d3d3d3; color:gray&lt;br /&gt;
&amp;lt;!-- Twist &amp;quot;tribes&amp;quot; (e.g. items which modify vote totals) --&amp;gt;&lt;br /&gt;
|negation=ffffff; color:black&lt;br /&gt;
|penalty=3f3f3f; color:white&lt;br /&gt;
|blackvote=000000; color:white&lt;br /&gt;
|bloodvote=ff0000; color:white&lt;br /&gt;
|vetoamulet=e5e0b0; color:black&lt;br /&gt;
&amp;lt;!-- Infobox placeholder --&amp;gt;&lt;br /&gt;
|infoboxplaceholder=5A4FCF; color:white&lt;br /&gt;
|a6a6a6=a6a6a6; color:white&lt;br /&gt;
|man=99ccff; color:black&lt;br /&gt;
|woman=ffa2b3; color:black&lt;br /&gt;
|nb|non-binary=cc99ff; color:black&lt;br /&gt;
|won=99ff99; color:black&lt;br /&gt;
|lost=ff9999; color:black&lt;br /&gt;
&amp;lt;!-- United States --&amp;gt;&lt;br /&gt;
|pagong=fff532; color:black&lt;br /&gt;
|tagi=fd8036; color:black&lt;br /&gt;
|rattana=7bb61a; color:black&lt;br /&gt;
|kucha=41a7b7; color:white&lt;br /&gt;
|ogakor=A6C347; color:black&lt;br /&gt;
|barramundi=fb6d07; color:black&lt;br /&gt;
|boran=ffd701; color:black&lt;br /&gt;
|samburu=e41a16; color:white&lt;br /&gt;
|motomaji=00a692; color:white&lt;br /&gt;
|maraamu=eeff33; color:black&lt;br /&gt;
|rotu=80ccff; color:black&lt;br /&gt;
|soliantu=cc0080; color:white&lt;br /&gt;
|chuaygahn=f33327; color:white&lt;br /&gt;
|sookjai=642795; color:white&lt;br /&gt;
|chuayjai=f9cb4d; color:black&lt;br /&gt;
|jaburu=f6ef39; color:black&lt;br /&gt;
|tambaqui=26abed; color:black&lt;br /&gt;
|jacare=ff2e20; color:white&lt;br /&gt;
|drake=4ec0ce; color:black&lt;br /&gt;
|morgan=e36d2f; color:black&lt;br /&gt;
|outcasts=653b94; color:white&lt;br /&gt;
|balboa=121d20; color:white&lt;br /&gt;
|chapera=d8102f; color:white&lt;br /&gt;
|mogomogo=309467; color:white&lt;br /&gt;
|saboga=fce55b; color:black&lt;br /&gt;
|chabogamogo=2454d3; color:white&lt;br /&gt;
|lopevi=eb2e21; color:white&lt;br /&gt;
|yasur=e1c729; color:black&lt;br /&gt;
|alinta=fc5215; color:white&lt;br /&gt;
|koror=6a3f30; color:white&lt;br /&gt;
|ulong=184d91; color:white&lt;br /&gt;
|mergedtribe10us|palaumerge=669933; color:white&lt;br /&gt;
|nakum=ffb119; color:black&lt;br /&gt;
|yaxha=5fc9d0; color:black&lt;br /&gt;
|xhakum=b90222; color:white&lt;br /&gt;
|casaya=6f3f9f; color:white&lt;br /&gt;
|lamina=e88e24; color:black&lt;br /&gt;
|bayoneta=0890d9; color:white&lt;br /&gt;
|viveros=61b842; color:black&lt;br /&gt;
|gitanos=0e131f; color:white&lt;br /&gt;
|aitutaki=f21305; color:white&lt;br /&gt;
|rarotonga=163396; color:white&lt;br /&gt;
|manihiki=fcbb00; color:black&lt;br /&gt;
|pukapuka=218e15; color:white&lt;br /&gt;
|aitutonga=050505; color:white&lt;br /&gt;
|moto=77cf2d; color:black&lt;br /&gt;
|ravu=fb6423; color:black&lt;br /&gt;
|bulabula=a437b0; color:white&lt;br /&gt;
|feilong=dc4629; color:white&lt;br /&gt;
|zhanhu=d4b63a; color:black&lt;br /&gt;
|haedafung=2a2a2c; color:white&lt;br /&gt;
|airai=f07813; color:black&lt;br /&gt;
|malakal=632983; color:white&lt;br /&gt;
|dabu=93C75A; color:black&lt;br /&gt;
|fang=fe3625; color:white&lt;br /&gt;
|kota=fbf010; color:black&lt;br /&gt;
|nobag=4084ff; color:white&lt;br /&gt;
|jalapao=b00407; color:white&lt;br /&gt;
|timbira=221f25; color:white&lt;br /&gt;
|forza=339E3F; color:white&lt;br /&gt;
|foafoa=fce100; color:black&lt;br /&gt;
|galu=814280; color:white&lt;br /&gt;
|aiga=026fb3; color:white&lt;br /&gt;
|heroes=025bac; color:white&lt;br /&gt;
|villains=96000c; color:white&lt;br /&gt;
|yinyang=000000; color:white&lt;br /&gt;
|espada=004b9a; color:white&lt;br /&gt;
|laflor=ffe501; color:black&lt;br /&gt;
|libertad=b0172b; color:white&lt;br /&gt;
|ometepe=f29f00; color:black&lt;br /&gt;
|zapatera=7f358b; color:white&lt;br /&gt;
|redemption|extinction=36454F; color:white&lt;br /&gt;
|murlonio=1a171a; color:white&lt;br /&gt;
|upolu=01459b; color:white&lt;br /&gt;
|savaii=f50b18; color:white&lt;br /&gt;
|tetuna=ffed02; color:black&lt;br /&gt;
|manono=f18000; color:black&lt;br /&gt;
|salani=6abdb5; color:black&lt;br /&gt;
|tikiano=1d181c; color:white&lt;br /&gt;
|kalabaw=ff0127; color:white&lt;br /&gt;
|tandang=ffff02; color:black&lt;br /&gt;
|matsing=305af9; color:white&lt;br /&gt;
|dangrayne=000000; color:white&lt;br /&gt;
|gota=ed7627; color:black&lt;br /&gt;
|bikal=854185; color:white&lt;br /&gt;
|eniledam=64aa23; color:black&lt;br /&gt;
|tadhana=b21c1a; color:white&lt;br /&gt;
|galang=ecab18; color:black&lt;br /&gt;
|kasama=4f2b7d; color:white&lt;br /&gt;
|aparri=f0912b; color:black&lt;br /&gt;
|luzon=25a46e; color:white&lt;br /&gt;
|solana=872982; color:white&lt;br /&gt;
|solarrion=000000; color:white&lt;br /&gt;
|coyopa=e09717; color:black&lt;br /&gt;
|hunahpu=78c8c6; color:black&lt;br /&gt;
|huyopa=50b180; color:black&lt;br /&gt;
|escameca=0a59a0; color:white&lt;br /&gt;
|masaya=e8cc11; color:black&lt;br /&gt;
|nagarote=c21e21; color:white&lt;br /&gt;
|merica=000000; color:white; background: -webkit-linear-gradient(45deg, #6600cc 0%, #000000 25%, #000000 75%, #6600cc 100%); color:white&lt;br /&gt;
|angkor=d9a400; color:black&lt;br /&gt;
|bayon=c9007f; color:white&lt;br /&gt;
|takeo=02a698; color:white&lt;br /&gt;
|orkun=ed461d; color:white&lt;br /&gt;
|chanloh=02289d; color:white&lt;br /&gt;
|gondol=fba515; color:black&lt;br /&gt;
|totang=c6131b; color:white&lt;br /&gt;
|dara=020403; color:white&lt;br /&gt;
|ikabula=8cdc23; color:black&lt;br /&gt;
|takali|genx=6630a9; color:white&lt;br /&gt;
|vanua|millennials=eb3f00; color:white&lt;br /&gt;
|vinaka=242e26; color:white&lt;br /&gt;
|mana=a12211; color:white&lt;br /&gt;
|nuku=09569c; color:white&lt;br /&gt;
|tavua=6ac41f; color:black&lt;br /&gt;
|makumaku=ffd016; color:black&lt;br /&gt;
|levu=0079a4; color:white&lt;br /&gt;
|soko=ecd900; color:black&lt;br /&gt;
|yawa=c33a2f; color:white&lt;br /&gt;
|solewa=9c3ca3; color:white&lt;br /&gt;
|malolo=fe8d1b; color:black&lt;br /&gt;
|naviti=ba269a; color:white&lt;br /&gt;
|yanuya=009b45; color:white&lt;br /&gt;
|lavita=1d2733; color:white&lt;br /&gt;
|david|vuku=fb8e1d; color:black&lt;br /&gt;
|goliath|jabeni=8244a8; color:white&lt;br /&gt;
|tiva=38a449; color:white&lt;br /&gt;
|kalokalo=6dc6ee; color:black&lt;br /&gt;
|kama=f8d509; color:black&lt;br /&gt;
|lesu=249249; color:white&lt;br /&gt;
|manu=1644af; color:white&lt;br /&gt;
|vata=f2030f; color:white&lt;br /&gt;
|lairo=ffaf66; color:black&lt;br /&gt;
|vokai=cc99cc; color:black&lt;br /&gt;
|lumuwaku=017eb4; color:white&lt;br /&gt;
|lumuwakualt=373632; color:white; background: -webkit-linear-gradient(45deg, #0e3d4d 0%, #373632 25%, #373632 75%, #0e3d4d 100%); color:white&lt;br /&gt;
|dakal=c81c17; color:white&lt;br /&gt;
|sele=005f9a; color:white&lt;br /&gt;
|yara=439945; color:white&lt;br /&gt;
|koru=271e1c; color:white; background: -webkit-linear-gradient(45deg, #e1b408 0%, #271e1c 25%, #271e1c 75%, #e1b408 100%); color:white&lt;br /&gt;
|luvu=5dcde9; color:black&lt;br /&gt;
|ua=b3e37f; color:black&lt;br /&gt;
|yase=ffe77b; color:black&lt;br /&gt;
|viakana=fd333f; color:white&lt;br /&gt;
|ika=0195e9; color:white&lt;br /&gt;
|taku=fe8e02; color:black&lt;br /&gt;
|vati=02d277; color:black&lt;br /&gt;
|kulakula=cc74cf; color:black&lt;br /&gt;
|baka=ffed40; color:black&lt;br /&gt;
|coco=00aee1; color:white&lt;br /&gt;
|vesi=fa404d; color:white&lt;br /&gt;
|gaia=a4e7e5; color:black&lt;br /&gt;
|ratu=ff9c43; color:black&lt;br /&gt;
|soka=8be86b; color:black&lt;br /&gt;
|tika=d6b0ef; color:black&lt;br /&gt;
|vava=1e1818; color:white; background: -webkit-linear-gradient(45deg, #fe4b53 0%, #1e1818 25%, #1e1818 75%, #fe4b53 100%); color:white&lt;br /&gt;
|44merge|vavaalt=1e1818; color:white&lt;br /&gt;
|belo=2da1d7; color:white&lt;br /&gt;
|lulu=fcdb29; color:black&lt;br /&gt;
|reba=fc4047; color:white&lt;br /&gt;
|dakuwaqa=fe8139; color:black&lt;br /&gt;
|merged=999999; color:white&lt;br /&gt;
|nami=fca327; color:black&lt;br /&gt;
|siga=8eda77; color:black&lt;br /&gt;
|yanu=bf5dc2; color:white&lt;br /&gt;
|nuinui=f62f3e; color:black&lt;br /&gt;
|gata=fcde2d; color:black&lt;br /&gt;
|lavo=fe4e53; color:white&lt;br /&gt;
|tuku=0094d9; color:white&lt;br /&gt;
|beka=a46bc2; color:white&lt;br /&gt;
|civa=fdc03e; color:black&lt;br /&gt;
|lagi=d65fc5; color:white&lt;br /&gt;
|vula=b5f892; color:black&lt;br /&gt;
|niunai=0c97e3; color:white&lt;br /&gt;
|bula=ff5d51; color:black&lt;br /&gt;
|kele=3bb1db; color:black&lt;br /&gt;
|hina=ffda45; color:black&lt;br /&gt;
|uli=ff5d51; color:black&lt;br /&gt;
|lewatu=181e2e; color:white; background: -webkit-linear-gradient(45deg, #008bd9 0%, #1f2032 25%, #1f2032 75%, #feef15 100%); color:white&lt;br /&gt;
&amp;lt;!-- Only assigned to an unnamed merged tribe with a confirmed tribe color; only to be used if the merge and color is confirmed in the &amp;quot;Next Time on Survivor&amp;quot; preview. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Africa --&amp;gt;&lt;br /&gt;
|embera=143dbb; color:white&lt;br /&gt;
|kuna=f74c4c; color:black&lt;br /&gt;
|nagual=f7ee4c; color:black&lt;br /&gt;
&amp;lt;!-- Australia --&amp;gt;&lt;br /&gt;
|kadina=ccff33; color:black&lt;br /&gt;
|tipara=33b3cc; color:black&lt;br /&gt;
|aurora=cccccc; color:black&lt;br /&gt;
|kakula=fc7823; color:white&lt;br /&gt;
|moso=6fd2f3; color:black&lt;br /&gt;
|tanna=ec2127; color:white&lt;br /&gt;
|aganoa=e60033; color:white&lt;br /&gt;
|saanapu=3366cc; color:white&lt;br /&gt;
|vavau=e6cc1a; color:black&lt;br /&gt;
|fiafia=333333; color:white&lt;br /&gt;
|asaga=00b3b3; color:white&lt;br /&gt;
|samatau=a51984; color:white&lt;br /&gt;
|asatoa=333333; color:white&lt;br /&gt;
|champions18|champions18alt=003380; color:white&lt;br /&gt;
|contenders18|contenders18alt=cc001a; color:white&lt;br /&gt;
|korosavu=000000; color:white; background: -webkit-linear-gradient(45deg, #fdee00  0%, #000000 25%, #000000 75%, #fdee00 100%); color:white&lt;br /&gt;
|champions19|champions19alt=33ccff; color:black&lt;br /&gt;
|contenders19|contenders19alt=ff66cc; color:black&lt;br /&gt;
|solibula=000000; color:white; background: -webkit-linear-gradient(45deg, #9b1f26 0%, #000000 25%, #000000 75%, #9b1f26 100%); color:white&lt;br /&gt;
|mokuta=00cc80; color:black&lt;br /&gt;
|vakama=ffff33; color:black&lt;br /&gt;
|kalokaloaus|kalo kalo=000000; color:white; background: -webkit-linear-gradient(45deg, #00cc80 0%, #000000 25%, #000000 75%, #ffff33 100%); color:white&lt;br /&gt;
|brains|brains21|brains21alt=FFE633; color:black&lt;br /&gt;
|brawn|brawn21|brawn21alt=cc0000; color:white&lt;br /&gt;
|fire=009999; color:white&lt;br /&gt;
|blood=ff0033; color:white&lt;br /&gt;
|water=0066cc; color:white&lt;br /&gt;
|lava=000000; color:white; background: -webkit-linear-gradient(45deg, #bf88f6 0%, #000000 25%, #000000 75%, #bf88f6 100%); color:white&lt;br /&gt;
|heroes10au|heroes10aualt=fbf404; color:black&lt;br /&gt;
|villains10au|villains10aualt=8066CC; color:white&lt;br /&gt;
|faamolemole=000000; color:white; background: -webkit-linear-gradient(45deg, #189f32 0%, #000000 25%, #000000 75%, #189f32 100%); color:white&lt;br /&gt;
|rebels=e61a66; color:white&lt;br /&gt;
|titans=4db3ff; color:black&lt;br /&gt;
|tasi=173fa8; color:white&lt;br /&gt;
|brains25|brains25alt=EB4B00; color:white&lt;br /&gt;
|brawn25|brawn25alt=7adacc; color:black&lt;br /&gt;
|malosi=000000; color:white; background: -webkit-linear-gradient(45deg, #7adacc 0%, #000000 25%, #000000 75%, #EB4B00 100%); color:white&lt;br /&gt;
|aussie=0b4d43; color:white; background: -webkit-linear-gradient(45deg, #ebd262 0%, #0b4d43 25%, #0b4d43 75%, #ebd262 100%); color:white&lt;br /&gt;
|world=112e69; color:white; background: -webkit-linear-gradient(45deg, #dd3452 0%, #112e69 25%, #112e69 75%, #dd3452 100%); color:white&lt;br /&gt;
|moorditj=000000; color:white; background: -webkit-linear-gradient(45deg, #99c9bf 0%, #000000 25%, #000000 75%, #f8db3c 100%); color:white&lt;br /&gt;
&amp;lt;!-- New Zealand --&amp;gt;&lt;br /&gt;
|hermosa=663399; color:white&lt;br /&gt;
|mogoton=ff9900; color:black&lt;br /&gt;
|casar=000000; color:white&lt;br /&gt;
|chani=0080cc; color:white&lt;br /&gt;
|khangkhaw=ffcc33; color:black&lt;br /&gt;
|phsan=4d0040; color:white&lt;br /&gt;
&amp;lt;!-- South Africa --&amp;gt;&lt;br /&gt;
|aguila=333399; color:white&lt;br /&gt;
|rana=cc1a1a; color:white&lt;br /&gt;
|burba=ffff33; color:black&lt;br /&gt;
|bajau=ffff33; color:black&lt;br /&gt;
|iban=4D80CC; color:white&lt;br /&gt;
|empu=e64d4d; color:black&lt;br /&gt;
|chibudu=cc3300; color:white&lt;br /&gt;
|timbila=316b95; color:white&lt;br /&gt;
|kululama=333333; color:white&lt;br /&gt;
|goma=009999; color:white&lt;br /&gt;
|raituhn=FFE633; color:black&lt;br /&gt;
|eku=ff4433; color:white&lt;br /&gt;
|selatan=ffffff; color:black&lt;br /&gt;
|utara=000000; color:white&lt;br /&gt;
|juara=FF3333; color:white&lt;br /&gt;
|salvation=660099; color:white&lt;br /&gt;
|luzon6za|luzonalt=cc0000; color:white&lt;br /&gt;
|mindanao=0033cc; color:white&lt;br /&gt;
|visayas=FFE61A; color:black&lt;br /&gt;
|araw=ff3380; color:white&lt;br /&gt;
|sa&#039;ula|saula=00cccc; color:black&lt;br /&gt;
|ta&#039;alo|taalo=9933cc; color:white&lt;br /&gt;
|laumei=ffdd33; color:black&lt;br /&gt;
|manumalo=f86330; color:white&lt;br /&gt;
|zamba=009933; color:white&lt;br /&gt;
|vuna=ff6600; color:black&lt;br /&gt;
|osindile=1a4db3; color:white&lt;br /&gt;
|masu=003399; color:white&lt;br /&gt;
|yontau=990000; color:white&lt;br /&gt;
|salan=ffe633; color:black&lt;br /&gt;
&amp;lt;!-- United Kingdom --&amp;gt;&lt;br /&gt;
|helang=fff700; color:black&lt;br /&gt;
|ular=4343eb; color:white&lt;br /&gt;
|sekutu=fd7200; color:black&lt;br /&gt;
|northisland=ff3333; color:white&lt;br /&gt;
|southisland=3333ff; color:white&lt;br /&gt;
|columbus=999999; color:white&lt;br /&gt;
|lanena=3399ff; color:white&lt;br /&gt;
|caletón=ff6633; color:white&lt;br /&gt;
|calena=ff3366; color:white&lt;br /&gt;
&amp;lt;!-- Sweden --&amp;gt;&lt;br /&gt;
|northse1=3366cc; color:white&lt;br /&gt;
|southse1=99cc99; color:black&lt;br /&gt;
|robinsonse1=99ccff; color:black&lt;br /&gt;
|northse2=3399cc; color:white&lt;br /&gt;
|southse2=ff9933; color:black&lt;br /&gt;
|robinsonse2=99cc99; color:black&lt;br /&gt;
|eastse3=ff6600; color:black&lt;br /&gt;
|northse3=336633; color:white&lt;br /&gt;
|southse3=ffcc00; color:black&lt;br /&gt;
|westse3=99ccff; color:black&lt;br /&gt;
|robinsonse3=99ff33; color:black&lt;br /&gt;
|northse4=669933; color:white&lt;br /&gt;
|southse4=ffff33; color:black&lt;br /&gt;
|robinsonse4=99ccff; color:black&lt;br /&gt;
|northse5=669933; color:white&lt;br /&gt;
|southse5=ffff33; color:black&lt;br /&gt;
|robinsonse5=99cc99; color:black&lt;br /&gt;
|northse6=669933; color:white&lt;br /&gt;
|southse6=ffff33; color:black&lt;br /&gt;
|robinsonse6=3366ff; color:white&lt;br /&gt;
|veteransse7=00cc66; color:black&lt;br /&gt;
|challengersse7=99ccff; color:black&lt;br /&gt;
|northse7=669933; color:white&lt;br /&gt;
|southse7=ffff33; color:black&lt;br /&gt;
|robinsonse7=718BFF; color:black&lt;br /&gt;
|northse8=009999; color:white&lt;br /&gt;
|southse8=ffff33; color:black&lt;br /&gt;
|teamx=666666; color:white&lt;br /&gt;
|robinsonse8=718BFF; color:black&lt;br /&gt;
|danmarkvip=cc0000; color:white&lt;br /&gt;
|norgevip=003399; color:white&lt;br /&gt;
|sverigevip=ffff33; color:black&lt;br /&gt;
|robinsonvip=cc9966; color:black&lt;br /&gt;
|northse10=ffcc33; color:black&lt;br /&gt;
|southse10=cc0000; color:white&lt;br /&gt;
|robinsonse10=333333; color:white&lt;br /&gt;
|magkal|brise=ffcc33; color:black&lt;br /&gt;
|parangan|agwe=003366; color:white&lt;br /&gt;
|robinsonse11|legba|lubad|naiwan|tigasse15=cc0000; color:white&lt;br /&gt;
|ghede=000000; color:white&lt;br /&gt;
|buwanga|kalinga=999900; color:white&lt;br /&gt;
|sarimanok|bontoc=cc66cc; color:white&lt;br /&gt;
|kalis=333333; color:white&lt;br /&gt;
|gago|guntaose15=000000; color:white&lt;br /&gt;
|charon=ff3333; color:white&lt;br /&gt;
|matal=ffffff; color:black&lt;br /&gt;
|robinsonse15=cc9966; color:black&lt;br /&gt;
|srei=009999; color:white&lt;br /&gt;
|bros=cc0000; color:white&lt;br /&gt;
|robinsonse16|sreros=ffcc00; color:black&lt;br /&gt;
|northse17|northse18|northse19|northse20|northse21|southse23|southse24|southse25|southse26|southse27|southse28=FFE600; color:black&lt;br /&gt;
|southse17|southse18|southse19|southse20|southse21|northse23|northse24|northse25|northse26|northse27|northse28=e61a1a; color:white&lt;br /&gt;
|eastse21=006699; color:white&lt;br /&gt;
|westse21=669933; color:white&lt;br /&gt;
|northse22=ff6633; color:white&lt;br /&gt;
|southse22=009966; color:white&lt;br /&gt;
|robinsonse17=339999; color:white&lt;br /&gt;
|robinsonse18=999933; color:white&lt;br /&gt;
|robinsonse19=333366; color:white&lt;br /&gt;
|robinsonse20=000000; color:white&lt;br /&gt;
|robinsonse21=333333; color:white&lt;br /&gt;
|robinsonse22|robinsonse23|robinsonse24|robinsonse25|robinsonse26|robinsonse27|robinsonse28=0099CC; color:white&lt;br /&gt;
&amp;lt;!-- Argentina --&amp;gt;&lt;br /&gt;
|northteam1ar|northteam2ar=af51f1; color:white&lt;br /&gt;
|southteam1ar|southteam2ar=ffff00; color:black&lt;br /&gt;
|robinson1ar|robinson2ar=cc3333; color:white&lt;br /&gt;
|northteam3ar=ff3300; color:white&lt;br /&gt;
|southteam3ar=ffd700; color:black&lt;br /&gt;
|gauchosdelcaribe=000000; color:white&lt;br /&gt;
&amp;lt;!-- Austria --&amp;gt;&lt;br /&gt;
|north1at1de=008000; color:white&lt;br /&gt;
|south1at1de=ffff00; color:black&lt;br /&gt;
|robinson1at1de=0081FF; color:white&lt;br /&gt;
&amp;lt;!-- Azerbaijan --&amp;gt;&lt;br /&gt;
|blueaz=1100e6; color:white&lt;br /&gt;
|yellowaz=ffef00; color:black&lt;br /&gt;
&amp;lt;!-- Baltic States --&amp;gt;&lt;br /&gt;
|eesti1lv|eesti2lv|eesti3lv=66ccff; color:black&lt;br /&gt;
|latvija1lv|latvija2lv|latvija3lv=ffff33; color:black&lt;br /&gt;
|lietuva1lv|lietuva2lv|lietuva3lv=66cc66; color:black&lt;br /&gt;
|robinson1lv|robinson2lv|robinson3lv=333333; color:white&lt;br /&gt;
|elephants4lv=078fe6; color:white&lt;br /&gt;
|tigers=ff0033; color:white&lt;br /&gt;
|mergedtribe4lv=999999; color:black&lt;br /&gt;
&amp;lt;!-- Brazil --&amp;gt;&lt;br /&gt;
|lua|lua1br=1484cc; color:white&lt;br /&gt;
|sol|sol1br=f9e71b; color:black&lt;br /&gt;
|solua=ffa500; color:black&lt;br /&gt;
|ararasvermelhas=db2645; color:white&lt;br /&gt;
|lobosguaras=ffd700; color:black&lt;br /&gt;
|araguara=9c7454; color:white&lt;br /&gt;
|agua=73c2fb; color:black&lt;br /&gt;
|fogo=ffdf00; color:black&lt;br /&gt;
|foguagua=0bda51; color:black&lt;br /&gt;
|lider=080808; color:black&lt;br /&gt;
|manibu=ee7813; color:white&lt;br /&gt;
|taiba=0333a3; color:white&lt;br /&gt;
|carnauba=00a854; color:white&lt;br /&gt;
|calango=66cc66; color:black&lt;br /&gt;
|carcara=ff9933; color:black&lt;br /&gt;
|jandaia=b3b34d; color:black; background: -webkit-linear-gradient(left, #66cc66 50%, #ff9933 50%); color:black&lt;br /&gt;
|jandaiaalt=b3b34d; color:black; background: -webkit-linear-gradient(top, #66cc66 50%, #ff9933 50%); color:black; text-shadow: black 1px 0 10px, 0 0 1em black, 0 0 0.33em black&lt;br /&gt;
|lua6br=0066cc; color:white&lt;br /&gt;
|sol6br=ffe633; color:black&lt;br /&gt;
|estrela=993380; color:white&lt;br /&gt;
|jenipapo=1a4d99; color:white&lt;br /&gt;
|urucum=FF7E43; color:black&lt;br /&gt;
|ananeco=c2b6b1; color:black&lt;br /&gt;
&amp;lt;!-- Bulgaria --&amp;gt;&lt;br /&gt;
|dulo=d61b1b; color:white&lt;br /&gt;
|vokil=5ace56; color:black&lt;br /&gt;
|kubrat=000000; color:white&lt;br /&gt;
|barbados=8be9ed; color:black&lt;br /&gt;
|tortuga=e22d2d; color:white&lt;br /&gt;
|drakebg=333232; color:white&lt;br /&gt;
|pacheka=f9a73b; color:black&lt;br /&gt;
|mogomogobg=72e597; color:black&lt;br /&gt;
|balboabg=a82323; color:black&lt;br /&gt;
|tayakbg=ffcc33; color:black&lt;br /&gt;
|pitogo=990099; color:white&lt;br /&gt;
|mindanaobg=333333; color:white&lt;br /&gt;
|lapulapu=cc0000; color:white&lt;br /&gt;
|garuda=a32a2a; color:white&lt;br /&gt;
|nagaBLG=1d870a; color:black&lt;br /&gt;
&amp;lt;!-- Chile --&amp;gt;&lt;br /&gt;
|northteam1cl=33ff33; color:black&lt;br /&gt;
|southteam1cl=3366cc; color:white&lt;br /&gt;
|robinson1cl=ffff00; color:black&lt;br /&gt;
&amp;lt;!-- China --&amp;gt;&lt;br /&gt;
|moonvillage=fff312; color:black&lt;br /&gt;
|sunvillage=e90000; color:white&lt;br /&gt;
&amp;lt;!-- Croatia --&amp;gt;&lt;br /&gt;
|petros=f00000; color:white&lt;br /&gt;
|ammos=fff700; color:black&lt;br /&gt;
|zoi=ff6a00; color:black&lt;br /&gt;
|boruka=ff8c28; color:black&lt;br /&gt;
|matambo=b95ee0; color:black&lt;br /&gt;
|sibu=11c7ff; color:black&lt;br /&gt;
|maors|crveni2023=ff3333; color:white&lt;br /&gt;
|azuahr|plavi2023=3366ff; color:white&lt;br /&gt;
&amp;lt;!-- Colombia --&amp;gt;&lt;br /&gt;
|atcha=FC860D; color:black&lt;br /&gt;
|ukup=FFFA00; color:black&lt;br /&gt;
|korgi=fb808d; color:black&lt;br /&gt;
|kahaya=b2f42e; color:black&lt;br /&gt;
|mucaro=ff6c11; color:black&lt;br /&gt;
|yabisi=fb808d; color:black&lt;br /&gt;
|chel=933b92; color:white&lt;br /&gt;
|itze=fff700; color:black&lt;br /&gt;
|kunab=ff1919; color:white&lt;br /&gt;
|drake4co=f92020; color:white&lt;br /&gt;
|morgan4co=ffff00; color:black&lt;br /&gt;
|balboa4co=00bbff; color:black&lt;br /&gt;
|ajedrecistas=f20014; color:white&lt;br /&gt;
|piratas=2162c4; color:white&lt;br /&gt;
|merge5co=ffffff; color:black&lt;br /&gt;
|chiccan=66FF66; color:black&lt;br /&gt;
|chuen=793A23; color:white&lt;br /&gt;
|imix=f92020; color:white&lt;br /&gt;
|manik=00D3FF; color:black&lt;br /&gt;
|ix=ffd51c; color:black&lt;br /&gt;
|amazonas=3399cc; color:white&lt;br /&gt;
|espartos=cc3333; color:white&lt;br /&gt;
|koi=ffffff; color:black&lt;br /&gt;
|gaia7co=73B34D; color:white&lt;br /&gt;
&amp;lt;!-- Czech Republic --&amp;gt;&lt;br /&gt;
|jesterky=f05d5d; color:black&lt;br /&gt;
|krabi=5e76f1; color:white&lt;br /&gt;
|mogomogocz=999999; color:white&lt;br /&gt;
|callao=C51919; color:white&lt;br /&gt;
|tabon=7DF9FF; color:black&lt;br /&gt;
|mayon2cz=ffff00; color:black&lt;br /&gt;
|kalinga3cz=FF0000; color:white&lt;br /&gt;
|manobo3cz=ffff00; color:black&lt;br /&gt;
|tawitawi=009ACD; color:white&lt;br /&gt;
|azua=3366ff; color:white&lt;br /&gt;
|mao=ff3333; color:white&lt;br /&gt;
|bonao=000000; color:white&lt;br /&gt;
|hrdinove|titani=e61a1a; color:white&lt;br /&gt;
|rebelove|lovci=1a4dff; color:white&lt;br /&gt;
|rivalove=1a1a1a; color:white&lt;br /&gt;
|tainos=ffcc00; color:black&lt;br /&gt;
|bohyne|krotitele=339933; color:white&lt;br /&gt;
|dobyvatele|fenixove=ffcc00; color:black&lt;br /&gt;
|divoši|divosi=7a5485; color:white&lt;br /&gt;
&amp;lt;!-- Denmark --&amp;gt;&lt;br /&gt;
|northdk1=3399ff; color:white&lt;br /&gt;
|southdk1=ff9900; color:black&lt;br /&gt;
|robinsondk1=99cc99; color:black&lt;br /&gt;
|northdk2=00cc66; color:black&lt;br /&gt;
|southdk2=ffff00; color:black&lt;br /&gt;
|robinsondk2=99ff33; color:black&lt;br /&gt;
|northdk3=00cc33; color:black&lt;br /&gt;
|southdk3=ffff00; color:black&lt;br /&gt;
|robinsondk3=66ccff; color:black&lt;br /&gt;
|northdk4=339999; color:white&lt;br /&gt;
|southdk4=ffff00; color:black&lt;br /&gt;
|robinsondk4=66ccff; color:black&lt;br /&gt;
|northdk5=00cc66; color:black&lt;br /&gt;
|southdk5=ffff66; color:black&lt;br /&gt;
|robinsondk5=66ccff; color:black&lt;br /&gt;
|northdk6|northdk7=669933; color:white&lt;br /&gt;
|southdk6|southdk7=3399cc; color:white&lt;br /&gt;
|robinsondk6|robinsondk7=ffff66; color:black&lt;br /&gt;
|jylland=ff6666; color:black&lt;br /&gt;
|kobenhavn=ffcc33; color:black&lt;br /&gt;
|robinsondk9=5cb3ff; color:black&lt;br /&gt;
|northdk10=13357f; color:white&lt;br /&gt;
|southdk10=b64e50; color:white&lt;br /&gt;
|robinsondk10=000000; color:white&lt;br /&gt;
|goaldk11=e48b04; color:black&lt;br /&gt;
|sembilangdk11=000000; color:white&lt;br /&gt;
|robinsondk11=d30018; color:white&lt;br /&gt;
|sembilangdk12=FFD714; color:black&lt;br /&gt;
|tengahdk12=5280C4; color:white&lt;br /&gt;
|rapangdk12=D30018; color:white&lt;br /&gt;
|mensiripdk13=c51919; color:white&lt;br /&gt;
|tengadk13=fcd23c; color:black&lt;br /&gt;
|robinsondk13=000000; color:white&lt;br /&gt;
|minangdk14=ffcc00; color:black&lt;br /&gt;
|tengadk14=cc0000; color:white&lt;br /&gt;
|robinsondk14=333333; color:white&lt;br /&gt;
|northdk15=ffff33; color:black&lt;br /&gt;
|southdk15=cc0000; color:white&lt;br /&gt;
|robinsondk15=000000; color:white&lt;br /&gt;
|northdk16=e82e24; color:white&lt;br /&gt;
|southdk16=ffff00; color:black&lt;br /&gt;
|robinsondk16=5072ab; color:white&lt;br /&gt;
|northdk17=CE045B; color:white&lt;br /&gt;
|southdk17=F09827; color:black&lt;br /&gt;
|robinsondk17=0E8ED3; color:white&lt;br /&gt;
|northdk18=aa1919; color:white&lt;br /&gt;
|southdk18=f9d131; color:black&lt;br /&gt;
|robinsondk18=73853a; color:white&lt;br /&gt;
|northdk19=cc0000; color:white&lt;br /&gt;
|southdk19=66ccff; color:black&lt;br /&gt;
|eastdk19=333333; color:white&lt;br /&gt;
|north2dk19=9966cc; color:white&lt;br /&gt;
|south2dk19=ff6600; color:black&lt;br /&gt;
|robinsondk19=669966; color:white&lt;br /&gt;
|northdk20=c2333c; color:white&lt;br /&gt;
|southdk20=fff460; color:black&lt;br /&gt;
|eastdk20=3a3434; color:white&lt;br /&gt;
|north2dk20=530cce; color:white&lt;br /&gt;
|south2dk20=e67a3e; color:black&lt;br /&gt;
|robinsondk20=9ce1f8; color:black&lt;br /&gt;
|heltene=cc33cc; color:white&lt;br /&gt;
|jokerne=fade0f; color:black&lt;br /&gt;
|skurkene=000000; color:white&lt;br /&gt;
|northdk21=ff6600; color:black&lt;br /&gt;
|southdk21=66ff33; color:black&lt;br /&gt;
|robinsondk21=00ffff; color:black&lt;br /&gt;
|northdk22=154daf; color:white&lt;br /&gt;
|southdk22=dd0910; color:white&lt;br /&gt;
|robinsondk22=08a06a; color:white&lt;br /&gt;
|northdk23=e93d42; color:black&lt;br /&gt;
|southdk23=ff8f26; color:black&lt;br /&gt;
|robinsondk23=1479ae; color:white&lt;br /&gt;
|northdk24=3fa362; color:white&lt;br /&gt;
|southdk24=f98c1d; color:black&lt;br /&gt;
|robinsondk24=2186d3; color:white&lt;br /&gt;
|northdk25=2d52b5; color:white&lt;br /&gt;
|southdk25=ff0033; color:white&lt;br /&gt;
|robinsondk25|robinsondk26=1ab366; color:black&lt;br /&gt;
|bluedk26=00ccff; color:black&lt;br /&gt;
|greendk26=66ff33; color:black&lt;br /&gt;
|orangedk26=ff9900; color:black &lt;br /&gt;
|purpledk26=cc66cc; color:black&lt;br /&gt;
|northdk26=0066ff; color:white&lt;br /&gt;
|southdk26=ff1a00; color:white&lt;br /&gt;
|northdk27=009966; color:white&lt;br /&gt;
|southdk27=ff1a1a; color:white&lt;br /&gt;
|robinsondk27=ffd016; color:black &lt;br /&gt;
&amp;lt;!-- Finland --&amp;gt;&lt;br /&gt;
|sembilang1fi|goal=ffff66; color:black&lt;br /&gt;
|sribuat|texas=006633; color:white&lt;br /&gt;
|tengah1fi|tengah2fi=66ccff; color:black&lt;br /&gt;
|harimau=f20216; color:white&lt;br /&gt;
|rawa=ffeb16; color:black&lt;br /&gt;
|barubaru=00c6c9; color:black&lt;br /&gt;
|sabitan=ffff16; color:black&lt;br /&gt;
|tugawe=f20216; color:white&lt;br /&gt;
|gota4fi=0766e3; color:white&lt;br /&gt;
|agila=ffcc00; color:black&lt;br /&gt;
|buwaya=c63db9; color:white&lt;br /&gt;
|himbuyan5fi=0099cc; color:white&lt;br /&gt;
|carabao=ff1a00; color:white&lt;br /&gt;
|kuwago=0099cc; color:white&lt;br /&gt;
|buhawi=00994d; color:white&lt;br /&gt;
|aasat=ff4d1a; color:white&lt;br /&gt;
|vaanit=0080cc; color:white&lt;br /&gt;
|valland=ffb300; color:black&lt;br /&gt;
|caleton=db000a; color:white&lt;br /&gt;
|torrido=ffcc00; color:black&lt;br /&gt;
|culebra=003399; color:white&lt;br /&gt;
|barat=009966; color:white&lt;br /&gt;
|timur=ff6600; color:white&lt;br /&gt;
|tioman=3399ff; color:white&lt;br /&gt;
|sotong=e60000; color:white&lt;br /&gt;
|ular10fi=0000cc; color:white&lt;br /&gt;
|barakuda|tuan|kerbau=009966; color:white&lt;br /&gt;
|buaya=0066cc; color:white&lt;br /&gt;
|jerung|burung=ff0000; color:white&lt;br /&gt;
|baharu|baharu=ff6600; color:white&lt;br /&gt;
&amp;lt;!-- Flanders --&amp;gt;&lt;br /&gt;
|northnl1vl1=339966; color:white&lt;br /&gt;
|southnl1vl1=ffff33; color:black&lt;br /&gt;
|robinsonnl1vl1=99ccff; color:black&lt;br /&gt;
|limanl2vl2=ffff33; color:black&lt;br /&gt;
|simbang=99ff99; color:black&lt;br /&gt;
|periuk=99ccff; color:black&lt;br /&gt;
|mensirip3nl=cc0000; color:white&lt;br /&gt;
|uma3nl=339933; color:white&lt;br /&gt;
|kador3nl=99ccff; color:black&lt;br /&gt;
|pantai=009900; color:white&lt;br /&gt;
|timo=ffff33; color:black&lt;br /&gt;
|kelapa=99ccff; color:black&lt;br /&gt;
|belgie=ffff33; color:black&lt;br /&gt;
|nederlands=ffffff; color:black&lt;br /&gt;
|teluk=99ccff; color:black&lt;br /&gt;
|jong=ffcc33; color:black&lt;br /&gt;
|oud=ff6666; color:black&lt;br /&gt;
|bannie=cccccc; color:black&lt;br /&gt;
|winners=339966; color:black&lt;br /&gt;
|mensirip6nl=99ccff; color:black&lt;br /&gt;
|north7nl=ff6666; color:black&lt;br /&gt;
|south7nl=ffff33; color:black&lt;br /&gt;
|miniloc=333333; color:white&lt;br /&gt;
|panga=3399ff; color:black&lt;br /&gt;
|north8nl=669999; color:black&lt;br /&gt;
|south8nl=cc6666; color:black&lt;br /&gt;
|robinson8nl=99ccff; color:black&lt;br /&gt;
|northnl9vl9=ea0000; color:white&lt;br /&gt;
|southnl9vl9=0002E0; color:white&lt;br /&gt;
|rapang=ffcc00; color:black&lt;br /&gt;
|tengah=fefe33; color:black&lt;br /&gt;
|uma10nl=e32636; color:white&lt;br /&gt;
|lima10nl=32cd32; color:black&lt;br /&gt;
|junglemissie=dcbd14; color:black&lt;br /&gt;
|north11nl=36c636; color:black&lt;br /&gt;
|south11nl=a32521; color:white&lt;br /&gt;
|robinson11nl=486c92; color:white&lt;br /&gt;
|northnl12vl12=0000ff; color:white&lt;br /&gt;
|southnl12vl12=ffa500; color:black&lt;br /&gt;
|langun=32cd32; color:black&lt;br /&gt;
|kampnoord13nl=fa4040; color:black&lt;br /&gt;
|kampzuid13nl=fbdc29; color:black&lt;br /&gt;
|visserseiland=99ccff; color:black&lt;br /&gt;
|kampnoord14nl=e82e24; color:black&lt;br /&gt;
|kampzuid14nl=f8d303; color:black&lt;br /&gt;
|kador14nl=2e8429; color:black&lt;br /&gt;
|north15vl=efef00; color:black&lt;br /&gt;
|south15vl=b700b7; color:white&lt;br /&gt;
|robinson15vl=0df877; color:black&lt;br /&gt;
&amp;lt;!-- France --&amp;gt;&lt;br /&gt;
|korok|tambor|boro|mogo|kanawa|mosso|batang|tayak|jacare9fr|koror10fr|malabou|do|mambok|nekmao|mawar|simban|tinggi|aopoh|bokor|sambor|makawa|toa22fr|kama23fr|nacomo|sayake|oro26fr|oroalt|korok27fr|cadlao|tinago|matukad|pitogo31fr|tugawe32fr=ff4d4d; color:black&lt;br /&gt;
|lantanai|lanta-nai|ventanas|machiga|chapera4fr|kumo|tana|guntao|kadasi|sabitang|virak=ffff1a; color:black&lt;br /&gt;
|mergedtribe1fr|mergedtribe2fr=3366cc; color:white&lt;br /&gt;
|mergedtribe3fr|mergedtribe4fr|mergedtribe5fr|mergedtribe6fr|mergedtribe7fr|mergedtribe8fr|mergedtribe9fr|mergedtribe10fr|mergedtribe11fr|mergedtribe12fr|mergedtribe13fr|mergedtribe14fr|mergedtribe15fr|mergedtribe16fr|mergedtribe17fr|mergedtribe18fr|mergedtribe19fr|mergedtribe20fr|mergedtribe21fr|mergedtribe22fr|mergedtribe23fr|mergedtribe24fr|mergedtribe25fr|mergedtribe26fr|mergedtribe27fr|mergedtribe28fr|mergedtribe29fr|mergedtribe30fr|mergedtribe31fr|mergedtribe32fr=ffffff; color:black&lt;br /&gt;
|ikalu|ceva|timog=6699ff; color:black&lt;br /&gt;
|heros=333333; color:white&lt;br /&gt;
|tokalo|ilog|silangan=66cc66; color:black&lt;br /&gt;
|vakara|kanluran=ff9933; color:black&lt;br /&gt;
|vualiku|turung|hilaga=993399; color:white&lt;br /&gt;
|men27fr|women27fr=999999; color:white&lt;br /&gt;
|mingao|tupan|mawai|tiac|vang|wasai|klahan|sungai|tengah16fr|lankawai|karwai|naga|sokka|coravu|wakai|wakaï|tabuo|lawaki|vuro|toa26fr|toaalt|lantanai27fr|matingi|paniman=FFFF33; color:black&lt;br /&gt;
|takeo20fr=0066ff; color:white&lt;br /&gt;
|nacpan=3366cc; color:white&lt;br /&gt;
|thecursedtribe=000000; color:white&lt;br /&gt;
&amp;lt;!-- Georgia --&amp;gt;&lt;br /&gt;
|northge1=3158DD; color:white&lt;br /&gt;
|southge1=FFFF00; color:black&lt;br /&gt;
|mergedtribege1=E30000; color:white&lt;br /&gt;
&amp;lt;!-- Germany --&amp;gt;&lt;br /&gt;
|tasik=0000ff; color:white&lt;br /&gt;
|gunung=ffff00; color:black&lt;br /&gt;
|api=ff0000; color:white&lt;br /&gt;
|koro=61b9ea; color:black&lt;br /&gt;
|waya=e35097; color:white&lt;br /&gt;
|yasawa=fee347; color:black&lt;br /&gt;
&amp;lt;!-- Greece --&amp;gt;&lt;br /&gt;
|north1gr=006823; color:white&lt;br /&gt;
|south1gr=ffff33; color:black&lt;br /&gt;
|robinson1gr=00abf4; color:black&lt;br /&gt;
|north2gr=006823; color:white&lt;br /&gt;
|south2gr=ffff99; color:black&lt;br /&gt;
|robinson2gr=00abf4; color:black&lt;br /&gt;
|ellada3gr2tr=013179; color:white&lt;br /&gt;
|turkiye3gr2tr=fe0000; color:white&lt;br /&gt;
|diasimoi5gr|diasimoi6gr|turkiye7gr13tr|diasimoi8gr|diasimoi9gr|diasimoi10gr|diasimoi11gr=e63333; color:white&lt;br /&gt;
|machites5gr|machites6gr|ellada7gr13tr|machites8gr|machites9gr|machites10gr|machites11gr=3366ff; color:white&lt;br /&gt;
|merge5gr|merge6gr|merge8gr|merge9gr|merge10gr|merge11gr=999999; color:white&lt;br /&gt;
|black7gr13tr=000000; color:white&lt;br /&gt;
|white7gr13tr=ffffff; color:black&lt;br /&gt;
|aetous12gr=009933; color:white&lt;br /&gt;
|tigreis12gr=ffe600; color:black&lt;br /&gt;
|merge12gr=000000; color:white&lt;br /&gt;
&amp;lt;!-- Hungary --&amp;gt;&lt;br /&gt;
|north1hu=ff0000; color:white&lt;br /&gt;
|south1hu=0000ff; color:white&lt;br /&gt;
|mergedtribe1hu=ffff00; color:black&lt;br /&gt;
&amp;lt;!-- Israel --&amp;gt;&lt;br /&gt;
|jibaro=00FFFF; color:black&lt;br /&gt;
|sabana=FF0000; color:white&lt;br /&gt;
|tainu=FFA500; color:black&lt;br /&gt;
|baru=008080; color:white&lt;br /&gt;
|caniba=C80815; color:white&lt;br /&gt;
|casayail|casayaalt=0066CC; color:white&lt;br /&gt;
|carao=ffd221; color:black&lt;br /&gt;
|tinago3il=a759d1; color:white&lt;br /&gt;
|mansaka=f44289; color:white&lt;br /&gt;
|kalingail|kalingaalt=66A415; color:white&lt;br /&gt;
|mayon=1034A6; color:white&lt;br /&gt;
|samasama=F94D00; color:white&lt;br /&gt;
|banao=FF0000; color:white&lt;br /&gt;
|marikudo=FFC40C; color:black&lt;br /&gt;
|malaya=000000; color:white&lt;br /&gt;
|dang=B22222; color:white&lt;br /&gt;
|thiniym=0F52BA; color:white&lt;br /&gt;
|senh=FFFAFA; color:black&lt;br /&gt;
|coyopail|coyopaalt=8601AF; color:white&lt;br /&gt;
|huracan=00FFEF; color:black&lt;br /&gt;
|tepeu=FFBF00; color:black&lt;br /&gt;
|buhay=4be7fc; color:black&lt;br /&gt;
|ligaw=4eed83; color:black&lt;br /&gt;
|tagay=1B1B1B; color:white&lt;br /&gt;
|kankai=99273b; color:white&lt;br /&gt;
|ipogo=ecd23e; color:black&lt;br /&gt;
|tanaw=FEFEFA; color:black&lt;br /&gt;
|antinganting=F4C430; color:black&lt;br /&gt;
|kapre=FF0000; color:white&lt;br /&gt;
|tondo=0070FF; color:white&lt;br /&gt;
|apolaki11il=FB5154; color:white&lt;br /&gt;
|libulan=151314; color:white&lt;br /&gt;
|pagasa11il=ffffff; color:black&lt;br /&gt;
|baybayin=FBD57A; color:black&lt;br /&gt;
|tagalog=AB669D; color:white&lt;br /&gt;
|ulan=7B9D62; color:white&lt;br /&gt;
|sayomai=DC4429; color:white&lt;br /&gt;
|kalagan=4B9FED; color:white&lt;br /&gt;
|limokon=E43D9A; color:white&lt;br /&gt;
&amp;lt;!-- Italy --&amp;gt;&lt;br /&gt;
|kuna1it=ff9900; color:black&lt;br /&gt;
|tolote1it=FFFF00; color:black&lt;br /&gt;
|mergedtribe1it=999999; color:white&lt;br /&gt;
|famosi=ffffff; color:black&lt;br /&gt;
|nonfamosi=000000; color:white&lt;br /&gt;
|mergedtribe7it=ffffff; color:black&lt;br /&gt;
|accopiados=0066ff; color:white&lt;br /&gt;
|chicas=ff0000; color:white&lt;br /&gt;
|hombres=ffcc00; color:black&lt;br /&gt;
|playafantasma=ffffff; color:black&lt;br /&gt;
|blue19it=0385f0; color:white&lt;br /&gt;
|red19it=fc0129; color:white&lt;br /&gt;
|mergedtribe19it=ffffff; color:black&lt;br /&gt;
&amp;lt;!-- Japan --&amp;gt;&lt;br /&gt;
|bekeu|toytoy|ompas|somnak=ffff66; color:black&lt;br /&gt;
|deleb|wakka|dalahican|manglo=00ccff; color:black&lt;br /&gt;
|sagesils|nitay|tigum|langet=66cc66; color:black&lt;br /&gt;
&amp;lt;!-- Lebanon --&amp;gt;&lt;br /&gt;
|kamba=fade0f; color:black&lt;br /&gt;
|luo=e80000; color:white&lt;br /&gt;
|mergedtribe1lb=f16f08; color:white; background: -webkit-linear-gradient(top, #e80000 0%, #fade0f 100%); color:white; text-shadow: black 1px 1px 1px;&lt;br /&gt;
|mergedtribe1lbalt=f16f08; color:white; background: -webkit-linear-gradient(left, #e80000 0%, #fade0f 100%); color:white; text-shadow: black 1px 1px 1px;&lt;br /&gt;
&amp;lt;!-- Mexico --&amp;gt;&lt;br /&gt;
|kuaukali|halcon2mx|halcon3mx|dominantes|leones|halcon5mx|villanos6mx=009a3d; color:white&lt;br /&gt;
|oselokali|jaguar2mx|jaguar3mx|elegidos|toros|jaguar5mx|heroes6mx=fedb01; color:black&lt;br /&gt;
|losotros3mx=000000; color:white&lt;br /&gt;
|losotros6mx=36454F; color:white&lt;br /&gt;
|mergedtribe1mx=999999; color:white; background: -webkit-linear-gradient(45deg, #FFFFFF 0%, #000000 25%, #000000 75%, #FFFFFF 100%); color:white&lt;br /&gt;
|mergedtribe1mxalt=999999; color:black&lt;br /&gt;
|mergedtribe2mx=7fbb1f; color:black; background: -webkit-linear-gradient(top, #fedb01 0%, #009a3d 100%); color:black&lt;br /&gt;
|mergedtribe2mxalt=7fbb1f; color:black; background: -webkit-linear-gradient(left, #fedb01 0%, #009a3d 100%); color:black&lt;br /&gt;
|mergedtribe3mx=4d6b1c; color:white; background: -webkit-linear-gradient(top, #fedb01 0%, #1a1a1a 50%, #009a3d 100%); color:white&lt;br /&gt;
|mergedtribe3mxalt=4d6b1c; color:white; background: -webkit-linear-gradient(left, #fedb01 0%, #1a1a1a 50%, #009a3d 100%); color:white&lt;br /&gt;
|mergedtribe4mx=7fbb1f; color:black; background: -webkit-linear-gradient(top, #009a3d 0%, #fedb01  100%); color:black&lt;br /&gt;
|mergedtribe4mxalt=7fbb1f; color:black; background: -webkit-linear-gradient(left, #009a3d 0%, #fedb01  100%); color:black&lt;br /&gt;
|mergedtribe5mx=1a1a1a; color:white&lt;br /&gt;
|mergedtribe6mx=000000; color:white&lt;br /&gt;
&amp;lt;!-- Netherlands --&amp;gt;&lt;br /&gt;
|north15nl=f8d303; color:black&lt;br /&gt;
|south15nl=e82e24; color:black&lt;br /&gt;
|geheim=7d7d7d; color:black&lt;br /&gt;
|mensirip15nl=99ccff; color:black&lt;br /&gt;
|kampblauw=99ccff; color:black&lt;br /&gt;
|kampgeel=fbde34; color:black&lt;br /&gt;
|kamprood=ad1e1e; color:black&lt;br /&gt;
|kampnoord19nl=f74747; color:black&lt;br /&gt;
|kampzuid19nl=f4d666; color:black&lt;br /&gt;
|onbekenden=d6d6d6; color:black&lt;br /&gt;
|catanawan=4286f4; color:black&lt;br /&gt;
|north20nl=efef00; color:black&lt;br /&gt;
|south20nl=b700b7; color:white&lt;br /&gt;
|unknown20nl=008001; color:white&lt;br /&gt;
|merge20nl=0df877; color:black&lt;br /&gt;
|kampnoord22nl=4c6cdb; color:white&lt;br /&gt;
|kampzuid22nl=fb9c34; color:black&lt;br /&gt;
|2ndchance|secondchance=993366; color:white&lt;br /&gt;
|afvallerseiland|wasteisland=993333; color:white&lt;br /&gt;
|trata=44e4d4; color:black&lt;br /&gt;
|velaluka=5cd48c; color:black&lt;br /&gt;
|north24nl=fbfb04; color:black&lt;br /&gt;
|south24nl=fb7b04; color:black&lt;br /&gt;
|pungume=dc0404; color:white&lt;br /&gt;
|orange25nl=ff6600; color:white&lt;br /&gt;
|green25nl=339933; color:white&lt;br /&gt;
|purple25nl=993366; color:white&lt;br /&gt;
|chawi|chawi25nl=0066cc; color:white&lt;br /&gt;
|north26nl=cc3333; color:white&lt;br /&gt;
|south26nl=1a3399; color:white&lt;br /&gt;
|chawi26nl=1ab366; color:black&lt;br /&gt;
|north27nl=ff1a00; color:white&lt;br /&gt;
|south27nl=0033cc; color:white&lt;br /&gt;
|sabira27nl=1ab366; color:black&lt;br /&gt;
|blue28nl=330099; color:white&lt;br /&gt;
|orange28nl=ff6600; color:black&lt;br /&gt;
|purple28nl=993380; color:white&lt;br /&gt;
|yellow28nl=ffea00; color:black&lt;br /&gt;
&amp;lt;!-- Norway --&amp;gt;&lt;br /&gt;
|northno1=66cc99; color:black&lt;br /&gt;
|southno1=ffcc66; color:black&lt;br /&gt;
|robinsonno1=99ff33; color:black&lt;br /&gt;
|northno2=2d593f; color:white&lt;br /&gt;
|southno2=ffff99; color:black&lt;br /&gt;
|robinsonno2=4786c9; color:white&lt;br /&gt;
|northno3=5daa56; color:black&lt;br /&gt;
|southno3=ffff66; color:black&lt;br /&gt;
|robinsonno3=4786c9; color:white&lt;br /&gt;
|northno4=00B740; color:white&lt;br /&gt;
|southno4=fff389; color:black&lt;br /&gt;
|robinsonno4=34cccc; color:black&lt;br /&gt;
|southno5=ffff33; color:black&lt;br /&gt;
|northno5=3c773c; color:white&lt;br /&gt;
|robinsonno5=6fcde8; color:black&lt;br /&gt;
|southno6=ffff33; color:black&lt;br /&gt;
|northno6=3c773c; color:white&lt;br /&gt;
|robinsonno6=6fcde8; color:black&lt;br /&gt;
|northno8=ffae00; color:black&lt;br /&gt;
|southno8=2466c9; color:white&lt;br /&gt;
|robinsonno8=eb2323; color:white&lt;br /&gt;
|northno9=466d87; color:white&lt;br /&gt;
|southno9=fef602; color:black&lt;br /&gt;
|robinsonno9=ffa959; color:black&lt;br /&gt;
|lagsor9nw=ff4242; color:black&lt;br /&gt;
|lagnord9nw=3399ff; color:black&lt;br /&gt;
|teamx9nw=d4d4d4; color:black&lt;br /&gt;
|robinson9nw=000000; color:white&lt;br /&gt;
|southno11=e85a5a; color:black&lt;br /&gt;
|northno11=4f9ef7; color:black&lt;br /&gt;
|westno11=61ce75; color:black&lt;br /&gt;
|robinsonno11=706666; color:white&lt;br /&gt;
|gamle|lagnord11nw=ff4f4f; color:black&lt;br /&gt;
|30argamle=a3fff8; color:black&lt;br /&gt;
|unge|lagsor11nw=ffdd32; color:black&lt;br /&gt;
|robinson11nw=000000; color:white; -webkit-text-fill-color:white; -webkit-text-stroke-width:0.33px; -webkit-text-stroke-color:#ff3333&lt;br /&gt;
|northno13=8addf7; color:black&lt;br /&gt;
|southno13=ffd34f; color:black&lt;br /&gt;
|robinsonno13=f78ab1; color:black&lt;br /&gt;
|paradise=ffd84f; color:black&lt;br /&gt;
|robinson13nw=ff4f4f; color:black&lt;br /&gt;
|challengers=50fceb; color:black&lt;br /&gt;
|robinsonmerged13nw=262525; color:black&lt;br /&gt;
|northno14=ffd002; color:black&lt;br /&gt;
|southno14=c60300; color:white&lt;br /&gt;
|utfordrer=6fb0ed; color:black&lt;br /&gt;
|robinsonno14=000000; color:white; -webkit-text-fill-color:white; -webkit-text-stroke-width:0.33px; -webkit-text-stroke-color:#ff3333&lt;br /&gt;
|himbuyan=ff4242; color:black&lt;br /&gt;
|matalahod=f4d142; color:black&lt;br /&gt;
|catanhawan=4193ff; color:black&lt;br /&gt;
|northno16=ff4242; color:black&lt;br /&gt;
|southno16=f4d142; color:black&lt;br /&gt;
|robinsonno16=73853a; color:white&lt;br /&gt;
|redno17=db2a34; color:white&lt;br /&gt;
|yellowno17=ffb82b; color:black&lt;br /&gt;
|robinsonno17=003399; color:white&lt;br /&gt;
|northno18=00cc99; color:black&lt;br /&gt;
|southno18=ff6633; color:black&lt;br /&gt;
|robinsonno18=2186d3; color:white&lt;br /&gt;
&amp;lt;!-- Pakistan --&amp;gt;&lt;br /&gt;
|ishkuman=ff8c00; color:black&lt;br /&gt;
|karambar1pk=27009e; color:white&lt;br /&gt;
|mergedtribe1pk=287200; color:white&lt;br /&gt;
&amp;lt;!-- Philippines --&amp;gt;&lt;br /&gt;
|naak=FF4646; color:white&lt;br /&gt;
|jarakay=6487FF; color:white&lt;br /&gt;
|chalam=B670DB; color:white&lt;br /&gt;
|airaiph=FF9933; color:black&lt;br /&gt;
|kororph=0BDA51; color:black&lt;br /&gt;
|sonsorol=6DB9FF; color:black&lt;br /&gt;
|magan=37F703; color:black&lt;br /&gt;
|nagar=FF4848; color:black&lt;br /&gt;
|galone=03ADDE; color:black&lt;br /&gt;
|sarmayee=F2FB59; color:black&lt;br /&gt;
|bulan=4a008b; color:white&lt;br /&gt;
|tala=FFFF66; color:black&lt;br /&gt;
|apolaki=00DA4E; color:black&lt;br /&gt;
&amp;lt;!-- Poland --&amp;gt;&lt;br /&gt;
|north1pl=006823; color:white&lt;br /&gt;
|south1pl=ffff99; color:black&lt;br /&gt;
|robinson1pl=00abf4; color:black&lt;br /&gt;
|yakavi=ce0000; color:white&lt;br /&gt;
|mataka=f7d708; color:black&lt;br /&gt;
|vukupo=ffffff; color:black&lt;br /&gt;
&amp;lt;!-- Portugal --&amp;gt;&lt;br /&gt;
|sikui=FF9700; color:black&lt;br /&gt;
|uapt1=FFFF00; color:black&lt;br /&gt;
|baluti=00CB32; color:white&lt;br /&gt;
&amp;lt;!-- Quebec --&amp;gt;&lt;br /&gt;
|kalooban=8a5897; color:white&lt;br /&gt;
|tiyaga=fddb00; color:black&lt;br /&gt;
|pagasa=94bbe2; color:black&lt;br /&gt;
|bayani=0095ef; color:black &amp;lt;!--Could be 3157bc (white)--&amp;gt;&lt;br /&gt;
|nawa=fb9c1e; color:black &amp;lt;!--Could be f76319 (white)--&amp;gt;&lt;br /&gt;
|dalawa=ce1535; color:white&lt;br /&gt;
|malaki=e8e621; color:black&lt;br /&gt;
|ugat=f0503a; color:white&lt;br /&gt;
|sapa=4ea5db; color:black&lt;br /&gt;
|nanalo=fe8d1b; color:black&lt;br /&gt;
&amp;lt;!-- Romania --&amp;gt;&lt;br /&gt;
|mergedtribe2009ro=ff6d00; color:black&lt;br /&gt;
|hangin=97e0ed; color:black&lt;br /&gt;
|tubig=f45050; color:black&lt;br /&gt;
|araw1ro=afa928; color:black&lt;br /&gt;
|aspirantii=ffff00; color:black&lt;br /&gt;
|debutantii=336699; color:white&lt;br /&gt;
|vedetele=cc3333; color:white&lt;br /&gt;
|faimoșii|faimoșii1ro|faimoșii2ro|faimoșii3ro|vulturii|faimoșii4ro|faimoșii5ro|faimoșii6ro|faimoșii7ro=e63333; color:white&lt;br /&gt;
|faimoșii2020ro|faimoșii2021ro|faimoșii2022ro|vulturii|faimoșii2023ro|faimoșii2024ro=e63333; color:white&lt;br /&gt;
|războinicii|războinicii1ro|războinicii2ro|războinicii2ro|războinicii3ro|tigrii|războinicii4ro|războinicii5ro|războinicii6ro|războinicii7ro=3366ff; color:white&lt;br /&gt;
|războinicii2020ro|războinicii2021ro|războinicii2022ro|tigrii|războinicii2023ro|războinicii2024ro=3366ff; color:white&lt;br /&gt;
|mergedtribero|mergedtribe1ro|mergedtribe2ro|mergedtribe3ro=999999; color:white&lt;br /&gt;
|mergedtribe2020ro|mergedtribe2021ro|mergedtribe2022=999999; color:white&lt;br /&gt;
|taíno|taino=8c4d99; color:white; background: -webkit-linear-gradient(top, #e63333 50%, #3366ff 50%); color:white; text-shadow: black 1px 1px 1px;&lt;br /&gt;
|taínoalt|tainoalt=8c4d99; color:white; background: -webkit-linear-gradient(left, #e63333 50%, #3366ff 50%); color:white; text-shadow: black 1px 1px 1px;&lt;br /&gt;
|losbandidos=000000; color:white&lt;br /&gt;
&amp;lt;!-- Russia --&amp;gt;&lt;br /&gt;
|lizardsru1=002FFF; color:white&lt;br /&gt;
|turtlesru1=FF8100; color:black&lt;br /&gt;
|sharksru1=F70000; color:white&lt;br /&gt;
|elephantsru2=324ca8; color:white&lt;br /&gt;
|monkeys=ffe854; color:black&lt;br /&gt;
|tigersru2=e02914; color:white&lt;br /&gt;
|barracudas=017501; color:white&lt;br /&gt;
|pelicans=ff8100; color:black&lt;br /&gt;
|crocodiles=0044e4; color:white&lt;br /&gt;
|iguanasru4=ffaa01; color:black&lt;br /&gt;
|scorpionsru4=9ad5e2; color:black&lt;br /&gt;
|boasru4=ffe23e; color:black&lt;br /&gt;
|heroesru5=74d8ed; color:black&lt;br /&gt;
|starsru5=f88000; color:black&lt;br /&gt;
|piratesru5=878787; color:white&lt;br /&gt;
|lastheroru5=fff43e; color:black&lt;br /&gt;
|fireru6=ff7f00; color:black&lt;br /&gt;
|waterru6=383eb6; color:white&lt;br /&gt;
|terraincognita=ff1641; color:white&lt;br /&gt;
|beginnersru9=f5326d; color:white&lt;br /&gt;
|championsru9=ffff00; color:black&lt;br /&gt;
|heroesru9=ff9900; color:black&lt;br /&gt;
|elephantsru10=00cc00; color:white&lt;br /&gt;
|tigersru10=33cccc; color:black&lt;br /&gt;
|scorpionsru10=660099; color:white&lt;br /&gt;
|bearsru11=e5452c; color:white&lt;br /&gt;
|wolvesru11=89cea3; color:black&lt;br /&gt;
|snowleopards=75bbe0; color:black&lt;br /&gt;
&amp;lt;!-- Serbia --&amp;gt;&lt;br /&gt;
|armada=df0a0a; color:white&lt;br /&gt;
|roca=04a494; color:white&lt;br /&gt;
|perla=38c9ff; color:black&lt;br /&gt;
|gadang=c43aff; color:black&lt;br /&gt;
|manobors=ffde39; color:black&lt;br /&gt;
|diwata=fc4444; color:black&lt;br /&gt;
|bahandi=fdb60d; color:black&lt;br /&gt;
|kasuko=b73230; color:white&lt;br /&gt;
|putong=2953b8; color:white&lt;br /&gt;
&amp;lt;!-- Slovakia --&amp;gt;&lt;br /&gt;
|blue1sk=2c90f6; color:white&lt;br /&gt;
|red1sk=e41a2c; color:white&lt;br /&gt;
|merge1sk=66c605; color:black&lt;br /&gt;
|asul=00BFFF; color:black&lt;br /&gt;
|pula=FF0000; color:black&lt;br /&gt;
|dilaw=FFFF00; color:black&lt;br /&gt;
|hrdinove=3366ff; color:white&lt;br /&gt;
|rebelove=ff3333; color:white&lt;br /&gt;
&amp;lt;!-- Slovenia --&amp;gt;&lt;br /&gt;
|sambalsi=cb001d; color:white&lt;br /&gt;
|talasi=154ec9; color:white&lt;br /&gt;
|mansakasi=ffff00; color:black&lt;br /&gt;
&amp;lt;!-- Spain --&amp;gt;&lt;br /&gt;
|north1es=e1750b; color:white&lt;br /&gt;
|south1es=1034a6; color:white&lt;br /&gt;
|robinson1es=ec3b83; color:white&lt;br /&gt;
|north2es=1034a6; color:white&lt;br /&gt;
|south2es=e1750b; color:white&lt;br /&gt;
|robinson2es=ec3b83; color:white&lt;br /&gt;
|macorix=ff9000; color:black&lt;br /&gt;
|yamasa=a3fd54; color:black&lt;br /&gt;
|canan=95d2e6; color:black&lt;br /&gt;
|north5es=ff804d; color:black&lt;br /&gt;
|south5es=99ff66; color:black&lt;br /&gt;
|mergedtribe5es=000000; color:white&lt;br /&gt;
|samburu6es=c0c0c0; color:black&lt;br /&gt;
|masai=ffd700; color:black&lt;br /&gt;
|mergedtribe6es=000000; color:white&lt;br /&gt;
|black9es=000000; color:white&lt;br /&gt;
|white9es=ffffff; color:black&lt;br /&gt;
|merge9es=7f3c27; color:white&lt;br /&gt;
|men10es=1034a6; color:white&lt;br /&gt;
|women10es=ec3b83; color:white&lt;br /&gt;
|mergedtribe10es=7e8c21; color:white&lt;br /&gt;
|anonimos11es=c0c0c0; color:black&lt;br /&gt;
|famosos11es=ffd700; color:black&lt;br /&gt;
|mergedtribe11es=ffffff; color:black&lt;br /&gt;
|anonimos12es=c0c0c0; color:black&lt;br /&gt;
|famosos12es=ffd700; color:black&lt;br /&gt;
|mergedtribe12es=ffffff; color:black&lt;br /&gt;
|islabonita=a3fd54; color:black&lt;br /&gt;
|cayopaloma=ff0000; color:white&lt;br /&gt;
|mergedtribe13es=ffffff; color:black&lt;br /&gt;
|novatos=a3fd54; color:black&lt;br /&gt;
|veteranos=ff0000; color:white&lt;br /&gt;
|mergedtribe14es=000000; color:white&lt;br /&gt;
|agua15es=0099ff; color:white&lt;br /&gt;
|fuego15es=ff0000; color:white&lt;br /&gt;
|mergedtribe15es=000000; color:white&lt;br /&gt;
|cielo=0eaaeb; color:black&lt;br /&gt;
|infierno=ff0000; color:white&lt;br /&gt;
|tierra16es=878787; color:white&lt;br /&gt;
|mergedtribe16es=000000; color:white&lt;br /&gt;
|civilizado=33cc33; color:black&lt;br /&gt;
|salvaje=ff3366; color:white&lt;br /&gt;
|cabezadeleon=0099ff; color:white&lt;br /&gt;
|cayopaloma17es=ff9000; color:black&lt;br /&gt;
|mergedtribe17es=000000; color:white&lt;br /&gt;
|abandonados=c92244; color:white&lt;br /&gt;
|piratas18es=000000; color:white&lt;br /&gt;
|senores=f2af2a; color:black&lt;br /&gt;
|mergedtribe18es=8587a3; color:white; background: -webkit-linear-gradient(top, #11d9ff 0%, #fb3748 100%); color:white; text-shadow: black 1px 1px 1px;&lt;br /&gt;
|criados=333399; color:white&lt;br /&gt;
|mortales=fc271e; color:white&lt;br /&gt;
|mergedtribe19es=000000; color:white&lt;br /&gt;
|barcoencallado=878787; color:white&lt;br /&gt;
|isladelpirata=ff804d; color:black&lt;br /&gt;
|mergedtribe20es=000000; color:white&lt;br /&gt;
|fatal=ffcc33; color:black&lt;br /&gt;
|royale=009933; color:white&lt;br /&gt;
|mergedtribe21es=000000; color:white&lt;br /&gt;
|fatal22es=ff9933; color:black&lt;br /&gt;
|royale22es=154daf; color:white&lt;br /&gt;
|tierradenadie=000000; color:white&lt;br /&gt;
|cabezadeleon22es=ff9933; color:black &lt;br /&gt;
|cayopaloma22es=154daf; color:white&lt;br /&gt;
|mergedtribe22es=000000; color:white&lt;br /&gt;
|blue23es=003399; color:white&lt;br /&gt;
|red23es=ff0000; color:white&lt;br /&gt;
|mergedtribe23es=fb3748; color:white&lt;br /&gt;
|black25es|black26es=000000; color:white&lt;br /&gt;
|white25es|white26es=ffffff; color:black&lt;br /&gt;
|mergedtribe25es=fb3748; color:white&lt;br /&gt;
|mergedtribe26es=000000; color:white&lt;br /&gt;
&amp;lt;!-- Switzerland --&amp;gt;&lt;br /&gt;
|northch1=ff6600; color:black&lt;br /&gt;
|southch1=ffff00; color:black&lt;br /&gt;
|mergech1=99ccff; color:black&lt;br /&gt;
|mench2|womench2=999999; color:white&lt;br /&gt;
|eastch2=cccc33; color:black&lt;br /&gt;
|northch2=66ccff; color:black&lt;br /&gt;
|southch2=3366cc; color:white&lt;br /&gt;
|westch2=996633; color:white&lt;br /&gt;
|tengahch2=999999; color:white&lt;br /&gt;
&amp;lt;!-- Turkey --&amp;gt;&lt;br /&gt;
|northtr1=1c82ff; color:white&lt;br /&gt;
|southtr1=ff0801; color:white&lt;br /&gt;
|mergetr1=fbf404; color:black&lt;br /&gt;
|ellada3gr2tr=013179; color:white&lt;br /&gt;
|turkiye3gr2tr=fe0000; color:white&lt;br /&gt;
|aslanlar=fe0000; color:white&lt;br /&gt;
|kanaryalar=013179; color:white&lt;br /&gt;
|erkekler=2744f4; color:white&lt;br /&gt;
|kizlar=ff9900; color:black&lt;br /&gt;
|merge4tr=9e0cce; color:white&lt;br /&gt;
|gonulluler5tr|gonulluler6tr|gonulluler7tr|gonulluler8tr|gonulluler9tr|gonulluler10tr|gonulluler11tr|gonulluler12tr|blue18tr=0099ff; color:white&lt;br /&gt;
|unluler5tr|unluler6tr|unluler7tr|unluler8tr|unluler9tr|unluler10tr|unluler11tr|allstar12tr|red18tr=ff3300; color:white&lt;br /&gt;
|merge5tr|merge6tr|merge9tr|merge10tr|merge11tr|merge12tr|merge18tr=ffcc33; color:black&lt;br /&gt;
&amp;lt;!-- Venezuela --&amp;gt;&lt;br /&gt;
|northteam1ve=3067cb; color:white&lt;br /&gt;
|southteam1ve=FFFF00; color:black&lt;br /&gt;
|robinson1ve=FF8C00; color:black&lt;br /&gt;
|northteam2ve=ff0000; color:white&lt;br /&gt;
|southteam2ve=182fad; color:white&lt;br /&gt;
|robinson2ve=FF8C00; color:black&lt;br /&gt;
&amp;lt;!-- United States (Unofficial) --&amp;gt;&lt;br /&gt;
|luchadores1usu=008CFF; color:white&lt;br /&gt;
|privilegiados1usu=FF6730; color:black&lt;br /&gt;
|retadores1usu=1FFF90; color:black&lt;br /&gt;
|mergedtribe1usu=FFF500; color:black&lt;br /&gt;
&amp;lt;!-- Columbia (Unofficial) --&amp;gt;&lt;br /&gt;
|celebridades1cou|celebridades2cou|privilegiados|catanos|2costenos5cou|2costenos7cou|costenos9cou|celebridades11cou=ff8c00; color:black&lt;br /&gt;
|retadores1cou|retadores2cou|llevados|pelados|2vallecaucanos5cou|2paisas7cou|vallecaucanos9cou|retadores11cou=02ef00; color:black&lt;br /&gt;
|sobrevivientes1cou|sobrevivientes2cou|rebuscadores|cuchachos|2cachacos5cou|sobrevivientes7cou|cachacos9cou|sobrevivientes11cou=0900ff; color:white&lt;br /&gt;
|mergedtribe1cou|mergedtribe2cou|mergedtribe3cou|mergedtribe4cou|mergedtribe5cou|mergedtribe7cou|mergedtribe9cou|mergedtribe11cou=fff500; color:black&lt;br /&gt;
|cachacos5cou=552b2b; color:white&lt;br /&gt;
|costenos5cou|cafeteros9cou=ffd700; color:black&lt;br /&gt;
|paisas5cou|paisas7cou|antioquenos9cou=681b6e; color:white&lt;br /&gt;
|santandereanos5cou|santandereanos7cou=00ccff; color:black&lt;br /&gt;
|vallecaucanos5cou|vallecaucanos7cou|santandereanos9cou=ff0000; color:white&lt;br /&gt;
|cachacos7cou=cccccc; color:black&lt;br /&gt;
|costenos7cou=88895d; color:black&lt;br /&gt;
|emigrantes7cou=ff69b4; color:black&lt;br /&gt;
|sobrevivientes9cou=000000; color:white&lt;br /&gt;
&amp;lt;!-- Mexico (Unofficial) --&amp;gt;&lt;br /&gt;
|est1|estrella2012li|famosos2012li=66ff33; color:black&lt;br /&gt;
|lun1|luna2012li|desconocidos2012li=3366cc; color:white&lt;br /&gt;
|sol1|sol2012li|celebridades2012li=ff8000; color:black&lt;br /&gt;
|fus1|fusión2012li=ffff00; color:black&lt;br /&gt;
|est2|estrella2013li|famosos2013li=66ff33; color:black&lt;br /&gt;
|lun2|luna2013li|desconocidos2013li=1a4db3; color:white&lt;br /&gt;
|sol2|sol2013li|celebridades2013li=ff8000; color:black&lt;br /&gt;
|fus2|fusión2013li=ffff00; color:black&lt;br /&gt;
|jaguar|jaguar2014li|celebridades2014li=ff8000; color:black&lt;br /&gt;
|mono|famosos2014li=66ff33; color:black&lt;br /&gt;
|serpiente|desconocidos2014li=0033b3; color:white&lt;br /&gt;
|caracol|caracol2014li=ffff00; color:black&lt;br /&gt;
|MXagua|agua2015li=3399cc; color:white&lt;br /&gt;
|fuego|fuego2015li=ff9933; color:black&lt;br /&gt;
|tierra|tierra2015li=66ff33; color:black&lt;br /&gt;
|fus4|aire|aire2015li=ffff00; color:black&lt;br /&gt;
|jade|jade2016li=00cc66; color:black&lt;br /&gt;
|oro|oro2016li=ff6633; color:black&lt;br /&gt;
|zafiro|zafiro2016li=3366cc; color:white&lt;br /&gt;
|hierro|destierro=804db3; color:white&lt;br /&gt;
|fus4|fusión2016li=ffff00; color:black&lt;br /&gt;
|banda=33b3ff; color:black&lt;br /&gt;
|godinez=4dff4d; color:black&lt;br /&gt;
|pudientes=ff6633; color:black&lt;br /&gt;
|returning=ff334d; color:white&lt;br /&gt;
|fus5|fusión2017li=ffff00; color:black&lt;br /&gt;
|desconocidos2023li=804dcc; color:white&lt;br /&gt;
|intensos|intensos2023li=FF8C00; color:white&lt;br /&gt;
|rebeldes|rebeldes2023li=33cc33; color:white&lt;br /&gt;
|fus6|fusión2023li=ffff00; color:black&lt;br /&gt;
&amp;lt;!-- Russia (Unofficial) --&amp;gt;&lt;br /&gt;
|sand=FFCC33; color:black&lt;br /&gt;
|river=00A89A; color:white&lt;br /&gt;
|sun=ff8d53; color:black&lt;br /&gt;
&amp;lt;!-- United States (Spanish/Unofficial) --&amp;gt;&lt;br /&gt;
|aguilas|águilas=b3d254; color:black&lt;br /&gt;
|panteras=885498; color:white&lt;br /&gt;
|tiburones=3ac1e0; color:black&lt;br /&gt;
|mergedtribe1usli=ec5912; color:black&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:Toy_Color&amp;diff=288</id>
		<title>Template:Toy Color</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:Toy_Color&amp;diff=288"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:Tlx&amp;diff=286</id>
		<title>Template:Tlx</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:Tlx&amp;diff=286"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Buildababe</name></author>
	</entry>
	<entry>
		<id>https://animalcookie.trumpetz.com/index.php?title=Template:Tlg&amp;diff=284</id>
		<title>Template:Tlg</title>
		<link rel="alternate" type="text/html" href="https://animalcookie.trumpetz.com/index.php?title=Template:Tlg&amp;diff=284"/>
		<updated>2026-04-09T23:40:45Z</updated>

		<summary type="html">&lt;p&gt;Buildababe: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Template link general]]&lt;br /&gt;
&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from move}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Buildababe</name></author>
	</entry>
</feed>