<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mbwiki.stairwaygames.work/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AShop_availability</id>
	<title>Module:Shop availability - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mbwiki.stairwaygames.work/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AShop_availability"/>
	<link rel="alternate" type="text/html" href="https://mbwiki.stairwaygames.work/w/index.php?title=Module:Shop_availability&amp;action=history"/>
	<updated>2026-04-07T21:34:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://mbwiki.stairwaygames.work/w/index.php?title=Module:Shop_availability&amp;diff=5587&amp;oldid=prev</id>
		<title>Admin coral island: Created page with &quot;local p = {} local Parse = require(&#039;Module:Parser&#039;).getTemplateArgs local Slib = require(&#039;Module:Shop&#039;) local lib = require(&#039;Module:Feature&#039;) local Icon = require(&#039;Module:Icon&#039;)._main  local Pages = {} local display = {}  function p.main(frame) 	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, { 		parentFirst=true, 		wrappers = {&#039;Template:Shop availability&#039;} 	}) 	local item = args[1] or mw.title.getCurrentTitle().rootText 	if lib.isNotEmpty(frame.args.pages) then...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mbwiki.stairwaygames.work/w/index.php?title=Module:Shop_availability&amp;diff=5587&amp;oldid=prev"/>
		<updated>2023-08-03T06:54:31Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local p = {} local Parse = require(&amp;#039;Module:Parser&amp;#039;).getTemplateArgs local Slib = require(&amp;#039;Module:Shop&amp;#039;) local lib = require(&amp;#039;Module:Feature&amp;#039;) local Icon = require(&amp;#039;Module:Icon&amp;#039;)._main  local Pages = {} local display = {}  function p.main(frame) 	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, { 		parentFirst=true, 		wrappers = {&amp;#039;Template:Shop availability&amp;#039;} 	}) 	local item = args[1] or mw.title.getCurrentTitle().rootText 	if lib.isNotEmpty(frame.args.pages) then...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local Parse = require(&amp;#039;Module:Parser&amp;#039;).getTemplateArgs&lt;br /&gt;
local Slib = require(&amp;#039;Module:Shop&amp;#039;)&lt;br /&gt;
local lib = require(&amp;#039;Module:Feature&amp;#039;)&lt;br /&gt;
local Icon = require(&amp;#039;Module:Icon&amp;#039;)._main&lt;br /&gt;
&lt;br /&gt;
local Pages = {}&lt;br /&gt;
local display = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {&lt;br /&gt;
		parentFirst=true,&lt;br /&gt;
		wrappers = {&amp;#039;Template:Shop availability&amp;#039;}&lt;br /&gt;
	})&lt;br /&gt;
	local item = args[1] or mw.title.getCurrentTitle().rootText&lt;br /&gt;
	if lib.isNotEmpty(frame.args.pages) then&lt;br /&gt;
		for page in string.gmatch(frame.args.pages, &amp;#039;(.-)%$%$%$&amp;#039;) do&lt;br /&gt;
			local data = Parse(page, { only=&amp;#039;Shop&amp;#039; } )&lt;br /&gt;
			local Pdata&lt;br /&gt;
			if type(data[1]) == &amp;#039;table&amp;#039; then&lt;br /&gt;
				for num, call in pairs(data) do&lt;br /&gt;
					Pdata = p.ParseCall(call, item)&lt;br /&gt;
					if Pdata then&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				Pdata = p.ParseCall(data, item)&lt;br /&gt;
			end&lt;br /&gt;
			if Pdata then&lt;br /&gt;
				Pdata.PAGENAME = page&lt;br /&gt;
				table.insert(Pages, Pdata)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if args.itemcol then display[&amp;#039;ITEM_NAME&amp;#039;] = true end&lt;br /&gt;
		return p._main(args, frame)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;No shop sells this item.&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args, frame)&lt;br /&gt;
	local temp_cols = { &amp;#039;Price range&amp;#039;, &amp;#039;Season&amp;#039;, &amp;#039;Town rank&amp;#039;, &amp;#039;Requirement&amp;#039; }&lt;br /&gt;
	local cols = {}&lt;br /&gt;
	local _table = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;fandom-table article-table sortable&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	-- header row&lt;br /&gt;
	local tr = _table:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	tr:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Location&amp;#039;)&lt;br /&gt;
	if display[&amp;#039;ITEM_NAME&amp;#039;] then tr:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Item&amp;#039;) end&lt;br /&gt;
	tr:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Price&amp;#039;)&lt;br /&gt;
	for _, col in ipairs(temp_cols) do&lt;br /&gt;
		if display[col] then&lt;br /&gt;
			table.insert(cols, col)&lt;br /&gt;
			tr:tag(&amp;#039;th&amp;#039;):wikitext(col)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- rest of table&lt;br /&gt;
	for _, page in ipairs(Pages) do&lt;br /&gt;
		local tr = _table:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		tr:tag(&amp;#039;td&amp;#039;):attr(&amp;#039;rowspan&amp;#039;, #page):wikitext(&amp;#039;[[&amp;#039;, page.PAGENAME, &amp;#039;]]&amp;#039;)&lt;br /&gt;
		for i, call in pairs(page) do&lt;br /&gt;
			if tonumber(i) ~= nil then&lt;br /&gt;
				-- mw.logObject(call) --debug&lt;br /&gt;
				if i&amp;gt;1 then tr = _table:tag(&amp;#039;tr&amp;#039;) end&lt;br /&gt;
				if display[&amp;#039;ITEM_NAME&amp;#039;] then tr:tag(&amp;#039;td&amp;#039;):node(Icon{call.ITEM_NAME}) end&lt;br /&gt;
				local td = tr:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				if call.Price and tonumber(call.Price) ~= nil then&lt;br /&gt;
					td&lt;br /&gt;
						:node(Icon{&lt;br /&gt;
								&amp;#039;Coin&amp;#039;,&lt;br /&gt;
								call.Price,&lt;br /&gt;
								size = &amp;#039;16&amp;#039;,&lt;br /&gt;
								notext = 1,&lt;br /&gt;
								nolink = 1&lt;br /&gt;
							})&lt;br /&gt;
						:attr(&amp;#039;data-sort-value&amp;#039;, call.Price)&lt;br /&gt;
				elseif call.Price and call.Price:find(&amp;#039;%*%d&amp;#039;) then&lt;br /&gt;
					local items = lib.split(call.Price, &amp;#039;,&amp;#039;)&lt;br /&gt;
					list = td:tag(&amp;#039;span&amp;#039;):addClass(&amp;#039;icon-list&amp;#039;)&lt;br /&gt;
					for _, item in ipairs(items) do&lt;br /&gt;
						local name, amount = string.match(item, &amp;#039;^(.-)*(.-)$&amp;#039;)&lt;br /&gt;
						if name == &amp;#039;Coin&amp;#039; then td:attr(&amp;#039;data-sort-value&amp;#039;, amount) end&lt;br /&gt;
						list:node(Icon{&lt;br /&gt;
							name,&lt;br /&gt;
							amount,&lt;br /&gt;
							size = (name==&amp;#039;Coin&amp;#039; and &amp;#039;16&amp;#039; or &amp;#039;20&amp;#039;),&lt;br /&gt;
							notext = (name==&amp;#039;Coin&amp;#039; and &amp;#039;1&amp;#039; or nil),&lt;br /&gt;
							nolink = (name==&amp;#039;Coin&amp;#039; and &amp;#039;1&amp;#039; or nil)&lt;br /&gt;
						})&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				for _, col in ipairs(cols) do&lt;br /&gt;
					local td = tr:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
					if call[col] then&lt;br /&gt;
						td:wikitext(call[col])&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- mw.logObject(_table) --debug&lt;br /&gt;
	return frame:preprocess(tostring(_table))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ParseCall(call_data, items)&lt;br /&gt;
	local delim = call_data.delim or &amp;#039;;&amp;#039;&lt;br /&gt;
	local default = {}&lt;br /&gt;
	table.insert(default, (call_data.firstcol or &amp;#039;Item&amp;#039;))&lt;br /&gt;
	table.insert(default, (call_data.secondcol or &amp;#039;Price&amp;#039;))&lt;br /&gt;
	local types = Slib.HashTypes(nil, call_data.cols, default)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local targets = {}&lt;br /&gt;
	local list = lib.split(items, &amp;#039;;&amp;#039;)&lt;br /&gt;
	if #list &amp;gt; 1 then display[&amp;#039;ITEM_NAME&amp;#039;] = true end&lt;br /&gt;
	for _, item in ipairs(list) do&lt;br /&gt;
		targets[string.lower(item)] = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for row_num, row in lib.spairs(call_data, function(tVal, a, b) return tostring(a)&amp;lt;tostring(b) end) do&lt;br /&gt;
		if tonumber(row_num) ~= nil then&lt;br /&gt;
			local row_cols = lib.split(row, delim)&lt;br /&gt;
			local row_data = Slib.splitParams(row_cols[1], &amp;#039;$&amp;#039;)&lt;br /&gt;
			local item = row_data.item or row_data[1]&lt;br /&gt;
			if targets[string.lower(item)] then&lt;br /&gt;
				local cols_data = lib.split(row, delim)&lt;br /&gt;
				local params = {[&amp;#039;ITEM_NAME&amp;#039;] = item}&lt;br /&gt;
				for col_num, col_value in ipairs(cols_data) do&lt;br /&gt;
					if col_num &amp;gt; 1 and types[col_num] and lib.isNotEmpty(col_value) then&lt;br /&gt;
						display[types[col_num]] = true&lt;br /&gt;
						params[types[col_num]] = col_value&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(ret, params)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if next(ret) then&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin coral island</name></author>
	</entry>
</feed>