<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.p1gsel.com/p1gwars/index.php?action=history&amp;feed=atom&amp;title=Module%3ACalculator</id>
	<title>Module:Calculator - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.p1gsel.com/p1gwars/index.php?action=history&amp;feed=atom&amp;title=Module%3ACalculator"/>
	<link rel="alternate" type="text/html" href="https://www.p1gsel.com/p1gwars/index.php?title=Module:Calculator&amp;action=history"/>
	<updated>2026-04-19T14:05:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://www.p1gsel.com/p1gwars/index.php?title=Module:Calculator&amp;diff=6256&amp;oldid=prev</id>
		<title>Rosie: Created page with &quot;local Calculator = {} Calculator.__index__ = Calculator  function Calculator:new(params) 	params = params or {}  	local root = params.root or mw.html.create(getElement(params)) 	if params.scoped ~= false then 		root:addClass(&#039;calculator-container&#039;) 			:attr(&#039;data-calculator-refresh-on-load&#039;, boolString(params.refreshOnLoad)) 	end 	root:addClass(params.class) 		:attr(&#039;style&#039;, params.style) 	 	local obj = { 		root = root, 		noJSFallback = &#039;&#039;, 		templatestyles = {} 	}  	if...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.p1gsel.com/p1gwars/index.php?title=Module:Calculator&amp;diff=6256&amp;oldid=prev"/>
		<updated>2026-01-11T14:50:42Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local Calculator = {} Calculator.__index__ = Calculator  function Calculator:new(params) 	params = params or {}  	local root = params.root or mw.html.create(getElement(params)) 	if params.scoped ~= false then 		root:addClass(&amp;#039;calculator-container&amp;#039;) 			:attr(&amp;#039;data-calculator-refresh-on-load&amp;#039;, boolString(params.refreshOnLoad)) 	end 	root:addClass(params.class) 		:attr(&amp;#039;style&amp;#039;, params.style) 	 	local obj = { 		root = root, 		noJSFallback = &amp;#039;&amp;#039;, 		templatestyles = {} 	}  	if...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local Calculator = {}&lt;br /&gt;
Calculator.__index__ = Calculator&lt;br /&gt;
&lt;br /&gt;
function Calculator:new(params)&lt;br /&gt;
	params = params or {}&lt;br /&gt;
&lt;br /&gt;
	local root = params.root or mw.html.create(getElement(params))&lt;br /&gt;
	if params.scoped ~= false then&lt;br /&gt;
		root:addClass(&amp;#039;calculator-container&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;data-calculator-refresh-on-load&amp;#039;, boolString(params.refreshOnLoad))&lt;br /&gt;
	end&lt;br /&gt;
	root:addClass(params.class)&lt;br /&gt;
		:attr(&amp;#039;style&amp;#039;, params.style)&lt;br /&gt;
	&lt;br /&gt;
	local obj = {&lt;br /&gt;
		root = root,&lt;br /&gt;
		noJSFallback = &amp;#039;&amp;#039;,&lt;br /&gt;
		templatestyles = {}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if params.noJSFallback then&lt;br /&gt;
		-- If fallback exists, wrap with calculatorgadget-enabled class&lt;br /&gt;
		root:addClass(&amp;#039;calculatorgadget-enabled&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;display&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
		&lt;br /&gt;
		-- No need to create html node for fallback if it&amp;#039;s an empty string&lt;br /&gt;
		if params.noJSFallback ~= &amp;#039;&amp;#039; then&lt;br /&gt;
	 		obj.noJSFallback = tostring(&lt;br /&gt;
				mw.html.create(getElement(params))&lt;br /&gt;
					:addClass(&amp;#039;calculatorgadget-fallback&amp;#039;)&lt;br /&gt;
					:wikitext(params.noJSFallback)&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	self.__index = self&lt;br /&gt;
	return setmetatable(obj, Calculator)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:field(params)&lt;br /&gt;
	return self.root:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;calculator-field&amp;#039;)&lt;br /&gt;
		:addClass(params.class)&lt;br /&gt;
		:attr(&amp;#039;id&amp;#039;, params.id and (&amp;#039;calculator-field-&amp;#039; .. params.id) or nil)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-type&amp;#039;, params.type or &amp;#039;number&amp;#039;)&lt;br /&gt;
		:attr(&amp;#039;style&amp;#039;, params.style)&lt;br /&gt;
		:css(&amp;#039;display&amp;#039;, params.type == &amp;#039;hidden&amp;#039; and &amp;#039;none&amp;#039; or nil)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-formula&amp;#039;, params.formula)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-readonly&amp;#039;, boolString(params.readonly))&lt;br /&gt;
		:attr(&amp;#039;data-calculator-size&amp;#039;, params.size)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-max&amp;#039;, params.max)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-min&amp;#039;, params.min)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-placeholder&amp;#039;, params.placeholder)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-name&amp;#039;, params.name)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-precision&amp;#039;, params.precision)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-exponential-precision&amp;#039;, params[&amp;#039;exponential-precision&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;data-calculator-decimals&amp;#039;, params.decimals)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-nan-text&amp;#039;, params[&amp;#039;NaN-text&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;data-calculator-class&amp;#039;, params[&amp;#039;class-live&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;aria-describedby&amp;#039;, params[&amp;#039;aria-describedby&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;aria-labelledby&amp;#039;, params[&amp;#039;aria-labelledby&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;aria-label&amp;#039;, params[&amp;#039;aria-label&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;data-calculator-enterkeyhint&amp;#039;, params.enterkeyhint)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-mapping&amp;#039;, params.mapping)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-aria-role&amp;#039;, params.role)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-aria-atomic&amp;#039;, params[&amp;#039;aria-atomic&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;data-calculator-aria-relevant&amp;#039;, params[&amp;#039;aria-relevant&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;data-calculator-aria-live&amp;#039;, params[&amp;#039;aria-live&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;data-calculator-checked&amp;#039;, boolString(params.checked))&lt;br /&gt;
		:attr(&amp;#039;data-calculator-value&amp;#039;, params.value)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-inputmode&amp;#039;, params.inputmode or&lt;br /&gt;
			(params.type == &amp;#039;text&amp;#039; and params.mapping == nil and &amp;#039;numeric&amp;#039; or nil))&lt;br /&gt;
		:attr(&amp;#039;data-calculator-step&amp;#039;, params.step)&lt;br /&gt;
		:wikitext(params.default or &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:button(params)&lt;br /&gt;
	local button = self.root:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;calculator-field-button&amp;#039;)&lt;br /&gt;
		:addClass(params.class)&lt;br /&gt;
		:attr(&amp;#039;id&amp;#039;, params.id)&lt;br /&gt;
		:attr(&amp;#039;title&amp;#039;, params.title)&lt;br /&gt;
		:attr(&amp;#039;style&amp;#039;, params.style)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-alt&amp;#039;, params.alt)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-disabled&amp;#039;, boolString(params.disabled))&lt;br /&gt;
		:attr(&amp;#039;data-calculator-for&amp;#039;, params[&amp;#039;for&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;data-calculator-formula&amp;#039;, params.formula)&lt;br /&gt;
		:attr(&amp;#039;role&amp;#039;, params.role)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-aria-live&amp;#039;, params[&amp;#039;aria-live&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;data-calculator-delay&amp;#039;, params.delay)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-max-iterations&amp;#039;, params[&amp;#039;max iterations&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;data-calculator-toggle&amp;#039;, params.toggle)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-class&amp;#039;, params[&amp;#039;class-live&amp;#039;])&lt;br /&gt;
		:wikitext(params.contents or params.text or params[1] or &amp;#039;Click me&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local type = params.type or &amp;#039;plain&amp;#039;&lt;br /&gt;
	if type ~= &amp;#039;plain&amp;#039; then&lt;br /&gt;
		button:addClass(&amp;#039;cdx-button&amp;#039;)&lt;br /&gt;
		button:addClass(&amp;#039;cdx-button--action-&amp;#039;..type)&lt;br /&gt;
		button:addClass(&amp;#039;cdx-button--weight-&amp;#039;..(params.weight or &amp;#039;normal&amp;#039;))&lt;br /&gt;
		button:addClass(&amp;#039;cdx-button--size-&amp;#039;..(params.size or &amp;#039;medium&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	return button&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:hidden(params)&lt;br /&gt;
	params.type = &amp;#039;hidden&amp;#039;&lt;br /&gt;
	return self:field(params)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:plain(params)&lt;br /&gt;
	params.type = &amp;#039;plain&amp;#039;&lt;br /&gt;
	return self:field(params)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:text(params)&lt;br /&gt;
	params.type = &amp;#039;text&amp;#039;&lt;br /&gt;
	return self:field(params)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:radio(params)&lt;br /&gt;
	params.type = &amp;#039;radio&amp;#039;&lt;br /&gt;
	return self:field(params)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:checkbox(params)&lt;br /&gt;
	params.type = &amp;#039;checkbox&amp;#039;&lt;br /&gt;
	return self:field(params)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:codexText(params)&lt;br /&gt;
	params.type = &amp;#039;text&amp;#039;&lt;br /&gt;
	params[&amp;#039;class-live&amp;#039;] = &amp;#039;cdx-text-input__input &amp;#039; .. (params[&amp;#039;class-live&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
	return self:field(params)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:codexRadio(params)&lt;br /&gt;
	params.type = &amp;#039;radio&amp;#039;&lt;br /&gt;
	params[&amp;#039;class-live&amp;#039;] = &amp;#039;cdx-radio__input &amp;#039; .. (params[&amp;#039;class-live&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	local outer = self:subContainer({ &lt;br /&gt;
		class = &amp;#039;cdx-radio &amp;#039; &lt;br /&gt;
			.. (params.inline and &amp;#039;cdx-radio--inline&amp;#039; or &amp;#039;&amp;#039;) &lt;br /&gt;
			.. (params[&amp;#039;codex-div-class&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
	})&lt;br /&gt;
	local inner = outer:subContainer({&lt;br /&gt;
		class = &amp;#039;cdx-radio__wrapper&amp;#039;&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	inner:field(params)&lt;br /&gt;
	inner:tag(&amp;#039;span&amp;#039;):addClass(&amp;#039;cdx-radio__icon&amp;#039;)&lt;br /&gt;
	inner:codexLabel({&lt;br /&gt;
		[&amp;#039;codex-class&amp;#039;] = &amp;#039;cdx-radio__label&amp;#039;,&lt;br /&gt;
		[&amp;#039;for&amp;#039;] = params.id,&lt;br /&gt;
		description = params.description,&lt;br /&gt;
		label = params.label&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	if params.custominput then &lt;br /&gt;
		outer:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;cdx-radio__custom-input&amp;#039;)&lt;br /&gt;
			:wikitext(params.custominput)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return outer&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:codexCheckbox(params)&lt;br /&gt;
	params.type = &amp;#039;checkbox&amp;#039;&lt;br /&gt;
	params[&amp;#039;class-live&amp;#039;] = &amp;#039;cdx-checkbox__input &amp;#039; .. (params[&amp;#039;class-live&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	local outer = self:subContainer({ &lt;br /&gt;
		class = &amp;#039;cdx-checkbox &amp;#039; &lt;br /&gt;
			.. (params.inline and &amp;#039;cdx-checkbox--inline&amp;#039; or &amp;#039;&amp;#039;) &lt;br /&gt;
			.. (params[&amp;#039;codex-div-class&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
	})&lt;br /&gt;
	local inner = outer:subContainer({&lt;br /&gt;
		class = &amp;#039;cdx-checkbox__wrapper&amp;#039;&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	inner:field(params)&lt;br /&gt;
	inner:tag(&amp;#039;span&amp;#039;):addClass(&amp;#039;cdx-checkbox__icon&amp;#039;)&lt;br /&gt;
	inner:codexLabel({&lt;br /&gt;
		[&amp;#039;codex-class&amp;#039;] = &amp;#039;cdx-checkbox__label&amp;#039;,&lt;br /&gt;
		[&amp;#039;for&amp;#039;] = params.id,&lt;br /&gt;
		description = params.description,&lt;br /&gt;
		label = params.label&lt;br /&gt;
	})&lt;br /&gt;
	&lt;br /&gt;
	if params.custominput then &lt;br /&gt;
		outer:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;cdx-checkbox__custom-input&amp;#039;)&lt;br /&gt;
			:wikitext(params.custominput)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return outer&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:codexToggle(params)&lt;br /&gt;
	params.type = &amp;#039;checkbox&amp;#039;&lt;br /&gt;
	params[&amp;#039;class-live&amp;#039;] = &amp;#039;cdx-toggle-switch__input &amp;#039; .. (params[&amp;#039;codex-live&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
	params.default = &amp;#039;&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;&amp;#039; .. (params.default or &amp;#039;&amp;#039;) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	local container = self:subContainer({&lt;br /&gt;
		element = &amp;#039;span&amp;#039;,&lt;br /&gt;
		class = &amp;#039;cdx-toggle-switch&amp;#039;&lt;br /&gt;
	})&lt;br /&gt;
	container:field(params)&lt;br /&gt;
	container:tag(&amp;#039;span&amp;#039;):addClass(&amp;#039;cdx-toggle-switch__switch&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;span&amp;#039;):addClass(&amp;#039;cdx-toggle-switch__switch__grip&amp;#039;)&lt;br /&gt;
		&lt;br /&gt;
	container:codexLabel({&lt;br /&gt;
		[&amp;#039;codex-class&amp;#039;] = &amp;#039;cdx-toggle-switch__label &amp;#039; &lt;br /&gt;
			..	(params.hiddendescription and &amp;#039;cdx-label--visually-hidden&amp;#039; or &amp;#039;&amp;#039;),&lt;br /&gt;
		[&amp;#039;for&amp;#039;] = params.id,&lt;br /&gt;
		description = params.description,&lt;br /&gt;
		label = params.label,&lt;br /&gt;
		style = params.labelstyle&lt;br /&gt;
	})&lt;br /&gt;
	return container&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:passthru(params)&lt;br /&gt;
	params.type = &amp;#039;passthru&amp;#039;&lt;br /&gt;
	return self:field(params)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:label(params)&lt;br /&gt;
	if params.codex then&lt;br /&gt;
		return self:codexLabel(params)&lt;br /&gt;
	end&lt;br /&gt;
	return self.root:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;calculator-field-label&amp;#039;)&lt;br /&gt;
		:addClass(params.class)&lt;br /&gt;
		:attr(&amp;#039;data-for&amp;#039;, params[&amp;#039;for&amp;#039;] and (&amp;#039;calculator-field-&amp;#039;.. params[&amp;#039;for&amp;#039;]) or nil)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-class&amp;#039;, params[&amp;#039;class-live&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;title&amp;#039;, params.title)&lt;br /&gt;
		:attr(&amp;#039;id&amp;#039;, params.id)&lt;br /&gt;
		:attr(&amp;#039;style&amp;#039;, params.style)&lt;br /&gt;
		:wikitext(params.label or params[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:codexLabel(params)&lt;br /&gt;
	local div = self.root:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;cdx-label&amp;#039;)&lt;br /&gt;
		:addClass(params[&amp;#039;codex-class&amp;#039;])&lt;br /&gt;
		&lt;br /&gt;
	local outerSpan = div:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;calculator-field-label cdx-label__label&amp;#039;)&lt;br /&gt;
		:addClass(params.class)&lt;br /&gt;
		:attr(&amp;#039;data-for&amp;#039;, params[&amp;#039;for&amp;#039;] and (&amp;#039;calculator-field-&amp;#039; .. params[&amp;#039;for&amp;#039;]) or nil)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-class&amp;#039;, params[&amp;#039;class-live&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;title&amp;#039;, params.title)&lt;br /&gt;
		:attr(&amp;#039;id&amp;#039;, params.id)&lt;br /&gt;
		:attr(&amp;#039;style&amp;#039;, params.style)&lt;br /&gt;
	&lt;br /&gt;
	outerSpan:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;cdx-label__label__text&amp;#039;)&lt;br /&gt;
		:wikitext(params.label or params[1])&lt;br /&gt;
		&lt;br /&gt;
	if params.flag then&lt;br /&gt;
		outerSpan:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;cdx-label__label__optional-flag&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039; &amp;#039; .. params.flag)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if params.description then&lt;br /&gt;
		-- Note: this doesn&amp;#039;t yet set proper aria-describedby on the input widget&lt;br /&gt;
		div:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;cdx-label__description&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;id&amp;#039;, params[&amp;#039;description-id&amp;#039;])&lt;br /&gt;
			:wikitext(params.description)&lt;br /&gt;
	end&lt;br /&gt;
	return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:hideIfZero(params)&lt;br /&gt;
	table.insert(self.templatestyles, &amp;#039;Template:Calculator-hideifzero/styles.css&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	return self.root:tag(getElement(params))&lt;br /&gt;
		:addClass(&amp;#039;calculator-field calculator-hideifzero&amp;#039;)&lt;br /&gt;
		:addClass(params.starthidden and &amp;#039;calculator-value-false&amp;#039; or nil)&lt;br /&gt;
		:addClass(params.class)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-type&amp;#039;, &amp;#039;passthru&amp;#039;)&lt;br /&gt;
		:attr(&amp;#039;style&amp;#039;, params.style)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-formula&amp;#039;, params.formula)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-aria-live&amp;#039;, params[&amp;#039;aria-live&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;data-calculator-aria-atomic&amp;#039;, params[&amp;#039;aria-atomic&amp;#039;])&lt;br /&gt;
		:attr(&amp;#039;role&amp;#039;, params.role)&lt;br /&gt;
		:attr(&amp;#039;data-calculator-class&amp;#039;, params[&amp;#039;class-live&amp;#039;])&lt;br /&gt;
		:wikitext(params.text or params[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Add arbitrary wikitext within the calculator container&lt;br /&gt;
function Calculator:wikitext(text)&lt;br /&gt;
	self.root:wikitext(text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Add arbitrary html node within the calculator container.&lt;br /&gt;
-- Note: if you would need to add calculator fields within that &lt;br /&gt;
-- node, use subContainer() instead.&lt;br /&gt;
function Calculator:tag(tagName)&lt;br /&gt;
	return self.root:tag(tagName)	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Add a wrapper html node within the calculator container,&lt;br /&gt;
-- for instance for styling. Additional calculator fields can &lt;br /&gt;
-- be added inside it.&lt;br /&gt;
function Calculator:subContainer(params)&lt;br /&gt;
	params = params or {}&lt;br /&gt;
	local subRoot = self.root:tag(getElement(params))&lt;br /&gt;
	return Calculator:new({ &lt;br /&gt;
		root = subRoot, &lt;br /&gt;
		scoped = false, &lt;br /&gt;
		class = params.class, &lt;br /&gt;
		style = params.style,&lt;br /&gt;
		noJSFallback = params.noJSFallback&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Calculator:__tostring()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
&lt;br /&gt;
	local styles = &amp;#039;&amp;#039;&lt;br /&gt;
	for idx, page in ipairs(self.templatestyles) do&lt;br /&gt;
		styles = styles .. frame:extensionTag(&amp;#039;templatestyles&amp;#039;, &amp;#039;&amp;#039;, {src = page})&lt;br /&gt;
	end&lt;br /&gt;
	return styles&lt;br /&gt;
		.. tostring(self.root) &lt;br /&gt;
		.. self.noJSFallback&lt;br /&gt;
		.. &amp;#039;[[Category:Pages using gadget Calculator]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getElement(params)&lt;br /&gt;
	return params.element or (params.block == false and &amp;#039;span&amp;#039; or &amp;#039;div&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function boolString(value)&lt;br /&gt;
	return value and tostring(value) or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return Calculator&lt;/div&gt;</summary>
		<author><name>Rosie</name></author>
	</entry>
</feed>