<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.perfecttower2.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AFactory_slot</id>
	<title>Module:Factory slot - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.perfecttower2.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AFactory_slot"/>
	<link rel="alternate" type="text/html" href="https://www.perfecttower2.com/wiki/index.php?title=Module:Factory_slot&amp;action=history"/>
	<updated>2026-04-20T10:27:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.33.1</generator>
	<entry>
		<id>https://www.perfecttower2.com/wiki/index.php?title=Module:Factory_slot&amp;diff=4076&amp;oldid=prev</id>
		<title>Exe boss: Add `title` attribute to item count and disable inline styles</title>
		<link rel="alternate" type="text/html" href="https://www.perfecttower2.com/wiki/index.php?title=Module:Factory_slot&amp;diff=4076&amp;oldid=prev"/>
		<updated>2026-04-12T08:15:26Z</updated>

		<summary type="html">&lt;p&gt;Add `title` attribute to item count and disable inline styles&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 08:15, 12 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l95&quot; &gt;Line 95:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 95:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:addClass(&amp;quot;factoryslot-item&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:addClass(&amp;quot;factoryslot-item&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:addClass(args.itemClass)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:addClass(args.itemClass)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:cssText(styles[&amp;quot;.factoryslot-item&amp;quot;])&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-- &lt;/ins&gt;:cssText(styles[&amp;quot;.factoryslot-item&amp;quot;])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:cssText(args.itemStyle);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:cssText(args.itemStyle);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l119&quot; &gt;Line 119:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 119:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	item:addClass(&amp;quot;pixel-image&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	item:addClass(&amp;quot;pixel-image&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:cssText(styles[&amp;quot;.pixel-image&amp;quot;])&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-- &lt;/ins&gt;:cssText(styles[&amp;quot;.pixel-image&amp;quot;])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:wikitext(&amp;quot;[[File:&amp;quot;, img, &amp;quot;|32x32px|link=&amp;quot;, link or &amp;quot;&amp;quot;, &amp;quot;|alt=&amp;quot;, altText, &amp;quot;|&amp;quot;, name, &amp;quot;]]&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:wikitext(&amp;quot;[[File:&amp;quot;, img, &amp;quot;|32x32px|link=&amp;quot;, link or &amp;quot;&amp;quot;, &amp;quot;|alt=&amp;quot;, altText, &amp;quot;|&amp;quot;, name, &amp;quot;]]&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l131&quot; &gt;Line 131:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 131:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			local number = item:tag(&amp;quot;span&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			local number = item:tag(&amp;quot;span&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				:addClass(&amp;quot;factoryslot-stacksize&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				:addClass(&amp;quot;factoryslot-stacksize&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				:cssText(styles[&amp;quot;.factoryslot-item .factoryslot-stacksize&amp;quot;])&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-- &lt;/ins&gt;:cssText(styles[&amp;quot;.factoryslot-item .factoryslot-stacksize&amp;quot;]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;				:attr(&amp;quot;title&amp;quot;, name&lt;/ins&gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				:wikitext(count);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				:wikitext(count);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l219&quot; &gt;Line 219:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 220:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:addClass(&amp;quot;factoryslot&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:addClass(&amp;quot;factoryslot&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:addClass(args.class)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:addClass(args.class)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:cssText(styles[&amp;quot;.factoryslot&amp;quot;])&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-- &lt;/ins&gt;:cssText(styles[&amp;quot;.factoryslot&amp;quot;])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:cssText(args.style);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		:cssText(args.style);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Exe boss</name></author>
		
	</entry>
	<entry>
		<id>https://www.perfecttower2.com/wiki/index.php?title=Module:Factory_slot&amp;diff=4058&amp;oldid=prev</id>
		<title>Exe boss: Create module for building Factory UI interfaces, inspired by and partially based on Minecraft Wiki's “Module:Inventory slot”</title>
		<link rel="alternate" type="text/html" href="https://www.perfecttower2.com/wiki/index.php?title=Module:Factory_slot&amp;diff=4058&amp;oldid=prev"/>
		<updated>2026-04-06T00:55:45Z</updated>

		<summary type="html">&lt;p&gt;Create module for building Factory UI interfaces, inspired by and partially based on Minecraft Wiki&amp;#039;s “Module:Inventory slot”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Used to render Factory inventory slots&lt;br /&gt;
-- Inspired by and partially based on Minecraft Wiki's [[Module:Inventory slot]]&lt;br /&gt;
require(&amp;quot;Module:No globals&amp;quot;);&lt;br /&gt;
local checkType = require(&amp;quot;libraryUtil&amp;quot;).checkType;&lt;br /&gt;
local ustr = mw.ustring;&lt;br /&gt;
local INFINITY = &amp;quot;∞&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
-- Workaround until this wiki gets TemplateStyles&lt;br /&gt;
local styles = {&lt;br /&gt;
[&amp;quot;.factoryslot&amp;quot;] = [[&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	border: 1px solid black;&lt;br /&gt;
	width: 32px;&lt;br /&gt;
	height: 32px;&lt;br /&gt;
	padding: 8px;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
]],&lt;br /&gt;
&lt;br /&gt;
[&amp;quot;.factoryslot-item&amp;quot;] = [[&lt;br /&gt;
	display: block;&lt;br /&gt;
	position: relative;&lt;br /&gt;
	width: 32px;&lt;br /&gt;
	height: 32px;&lt;br /&gt;
	margin: -4px;&lt;br /&gt;
	padding: 4px;&lt;br /&gt;
]],&lt;br /&gt;
&lt;br /&gt;
[&amp;quot;.pixel-image&amp;quot;] = [[&lt;br /&gt;
	image-rendering: crisp-edges;&lt;br /&gt;
	image-rendering: pixelated;&lt;br /&gt;
]],&lt;br /&gt;
&lt;br /&gt;
[&amp;quot;.factoryslot-item .factoryslot-stacksize&amp;quot;] = [[&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	bottom: 0;&lt;br /&gt;
	right: 0;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	font-family: sans-serif !important;&lt;br /&gt;
	font-style: normal !important;&lt;br /&gt;
]],&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
local p = {};&lt;br /&gt;
&lt;br /&gt;
--- Formats the item stack count&lt;br /&gt;
--- @param count integer&lt;br /&gt;
--- @return string|nil&lt;br /&gt;
function p.formatCount(count)&lt;br /&gt;
	checkType('&amp;quot;Module:Factory slot&amp;quot;.formatCount', 1, count, &amp;quot;number&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	count = math.floor(count);&lt;br /&gt;
	if (count &amp;gt;= 1e18) then&lt;br /&gt;
		return INFINITY;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (count &amp;lt; 2) then&lt;br /&gt;
		return nil;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (count &amp;lt; 1e6) then&lt;br /&gt;
		-- less than a million&lt;br /&gt;
		return tostring(count);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local exp = 3;&lt;br /&gt;
	while true do&lt;br /&gt;
		exp = exp + 3;&lt;br /&gt;
		count = math.floor(count / 1e3 + 0.5);&lt;br /&gt;
&lt;br /&gt;
		if (count &amp;lt; 1e6 or exp == 15) then&lt;br /&gt;
			--- @type string, string&lt;br /&gt;
			local result, b = tostring(count):match(&amp;quot;^(%d-%d)(%d%d%d)$&amp;quot;);&lt;br /&gt;
			b = b:gsub(&amp;quot;0+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
			if (b ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
				result = result .. &amp;quot;.&amp;quot; .. b;&lt;br /&gt;
			end&lt;br /&gt;
			result = result .. &amp;quot;e&amp;quot; .. exp;&lt;br /&gt;
			return result;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- @class ItemStack&lt;br /&gt;
--- @field name string&lt;br /&gt;
--- @field count? number&lt;br /&gt;
&lt;br /&gt;
--- Creates the actual HTML node for a given item stack&lt;br /&gt;
---&lt;br /&gt;
--- @param stack ItemStack&lt;br /&gt;
--- @param args? table&lt;br /&gt;
local function makeItem(stack, args)&lt;br /&gt;
	args = args or {}&lt;br /&gt;
&lt;br /&gt;
	local item = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;factoryslot-item&amp;quot;)&lt;br /&gt;
		:addClass(args.itemClass)&lt;br /&gt;
		:cssText(styles[&amp;quot;.factoryslot-item&amp;quot;])&lt;br /&gt;
		:cssText(args.itemStyle);&lt;br /&gt;
&lt;br /&gt;
	local name = stack.name;&lt;br /&gt;
	if ((name or &amp;quot;&amp;quot;) == &amp;quot;&amp;quot;) then&lt;br /&gt;
		-- Empty stack&lt;br /&gt;
		return nil;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local img = name .. &amp;quot;.png&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	local link = args.link;&lt;br /&gt;
	if ((link or &amp;quot;&amp;quot;) == &amp;quot;&amp;quot;) then&lt;br /&gt;
		link = nil;&lt;br /&gt;
	elseif (string.lower(link) == &amp;quot;no&amp;quot;) then&lt;br /&gt;
		link = nil;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local altText = img .. &amp;quot;: The Perfect Tower 2 Factory inventory icon of &amp;quot; .. name&lt;br /&gt;
	if (link) then&lt;br /&gt;
		altText = altText .. &amp;quot; linking to &amp;quot; .. link&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	item:addClass(&amp;quot;pixel-image&amp;quot;)&lt;br /&gt;
		:cssText(styles[&amp;quot;.pixel-image&amp;quot;])&lt;br /&gt;
		:wikitext(&amp;quot;[[File:&amp;quot;, img, &amp;quot;|32x32px|link=&amp;quot;, link or &amp;quot;&amp;quot;, &amp;quot;|alt=&amp;quot;, altText, &amp;quot;|&amp;quot;, name, &amp;quot;]]&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	local count = stack.count;&lt;br /&gt;
	if (count and count &amp;gt; 1) then&lt;br /&gt;
		count = p.formatCount(count);&lt;br /&gt;
		if (count ~= nil) then&lt;br /&gt;
			if (link) then&lt;br /&gt;
				item:wikitext(&amp;quot;[[&amp;quot;, link, &amp;quot;|&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
			local number = item:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
				:addClass(&amp;quot;factoryslot-stacksize&amp;quot;)&lt;br /&gt;
				:cssText(styles[&amp;quot;.factoryslot-item .factoryslot-stacksize&amp;quot;])&lt;br /&gt;
				:wikitext(count);&lt;br /&gt;
&lt;br /&gt;
			number:cssText(args.numStyle);&lt;br /&gt;
			if (link) then&lt;br /&gt;
				item:wikitext(&amp;quot;]]&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return item;&lt;br /&gt;
end&lt;br /&gt;
p._makeItem = makeItem;&lt;br /&gt;
&lt;br /&gt;
--- Parses an Item Stack Definition into an ItemStack table&lt;br /&gt;
---&lt;br /&gt;
--- Syntax:&lt;br /&gt;
--- ```text&lt;br /&gt;
--- &amp;lt;Name:string&amp;gt; ( ',' &amp;lt;Count:number&amp;gt; )?&lt;br /&gt;
--- ```&lt;br /&gt;
---&lt;br /&gt;
--- @param itemStackDesc string&lt;br /&gt;
--- @return ItemStack&lt;br /&gt;
function p.parseStack(itemStackDesc)&lt;br /&gt;
	-- Simple stack definition with no parts or reserved characters&lt;br /&gt;
	if (not string.match(itemStackDesc, &amp;quot;[:,]&amp;quot;)) then&lt;br /&gt;
		return { name = itemStackDesc };&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local stack = {};&lt;br /&gt;
	local name, count;&lt;br /&gt;
&lt;br /&gt;
	name, count = ustr.match(itemStackDesc, &amp;quot;^%s*(.*),%s*([&amp;quot; .. INFINITY .. &amp;quot;0-9%.e]+)%s*$&amp;quot;);&lt;br /&gt;
	if (count == INFINITY) then&lt;br /&gt;
		count = math.huge;&lt;br /&gt;
	else&lt;br /&gt;
		count = count and tonumber(count);&lt;br /&gt;
	end&lt;br /&gt;
	if (count) then&lt;br /&gt;
		stack.name = mw.text.trim(name);&lt;br /&gt;
		if (count &amp;gt;= 1e18) then&lt;br /&gt;
			count = math.huge;&lt;br /&gt;
		else&lt;br /&gt;
			count = math.floor(count);&lt;br /&gt;
		end&lt;br /&gt;
		stack.count = count;&lt;br /&gt;
	else&lt;br /&gt;
		stack.name = mw.text.trim(itemStackDesc);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return stack;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Stringifies an ItemStack table into an Item Stack Definition string&lt;br /&gt;
---&lt;br /&gt;
--- @param itemStack ItemStack&lt;br /&gt;
--- @return string&lt;br /&gt;
function p.stringifyStack(itemStack)&lt;br /&gt;
	local name = itemStack.name;&lt;br /&gt;
	local count = itemStack.count;&lt;br /&gt;
&lt;br /&gt;
	local result = name;&lt;br /&gt;
	if (count and count &amp;gt;= 0) then&lt;br /&gt;
		if (count &amp;gt;= 1e18) then&lt;br /&gt;
			count = INFINITY;&lt;br /&gt;
		else&lt;br /&gt;
			count = tostring(count);&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		result = result .. &amp;quot;,&amp;quot; .. count;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Main entry point.&lt;br /&gt;
--- Builds the HTML for a Factory inventory slot.&lt;br /&gt;
---&lt;br /&gt;
--- @param args any&lt;br /&gt;
function p.slot(args)&lt;br /&gt;
	local stack = args[1];&lt;br /&gt;
	if (type(stack) == &amp;quot;string&amp;quot;) then&lt;br /&gt;
		stack = p.parseStack(stack);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local body = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;factoryslot&amp;quot;)&lt;br /&gt;
		:addClass(args.class)&lt;br /&gt;
		:cssText(styles[&amp;quot;.factoryslot&amp;quot;])&lt;br /&gt;
		:cssText(args.style);&lt;br /&gt;
&lt;br /&gt;
	if (not stack) then&lt;br /&gt;
		return body;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	body:node(makeItem(stack, args));&lt;br /&gt;
&lt;br /&gt;
	return body;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Main template entry point.&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	return p.slot(require(&amp;quot;Module:Arguments&amp;quot;).getArgs(frame, {&lt;br /&gt;
		frameOnly = false,&lt;br /&gt;
		wrappers = { &amp;quot;Template:Factory slot&amp;quot; },&lt;br /&gt;
	}));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p;&lt;/div&gt;</summary>
		<author><name>Exe boss</name></author>
		
	</entry>
</feed>