Module:Item in other games

From Nookipedia, the Animal Crossing wiki

Documentation for this module may be created at Module:Item in other games/doc

local p = {}
local cargo = mw.ext.cargo
local convertCase = require('Module:SentenceCase').firstToUpper

function tableEmpty(s)
	return next(s) == nil
end

function isEmpty(s)
	return s == nil or s == ''
end

function p.main( frame )
	-- Declare variables
	local print = ''
	local tables
	local fields
	local args
	local results
	
	-- Determine the cargo table to which the module will pull from.
	if frame.args['game'] == "First gen" then
		tables = 'pg_identifier'
	    fields = "pg_identifier.identifier=identifier"
	    args = {
	        where = "pg_identifier._pageName = \"" .. frame.args['1']:gsub("\'","\\'") .. "\"",
	        limit = 1,
	        groupBy = 'pg_identifier._pageName',
	        default = '',
	    }
	    results = cargo.query( tables, fields, args )
	elseif frame.args['game'] == "Wild World" then
		tables = 'ww_identifier'
	    fields = "ww_identifier.identifier=identifier"
	    args = {
	        where = "ww_identifier._pageName = \"" .. frame.args['1']:gsub("\'","\\'") .. "\"",
	        limit = 1,
	        groupBy = 'ww_identifier._pageName',
	        default = '',
	    }
	    results = cargo.query( tables, fields, args )
	elseif frame.args['game'] == "City Folk" then
		print = "Not implemented yet"
		results = {}
	elseif frame.args['game'] == "New Leaf" then
		tables = 'nl_identifier'
	    fields = "nl_identifier.identifier=identifier"
	    args = {
	        where = "nl_identifier._pageName = \"" .. frame.args['1']:gsub("\'","\\'") .. "\"",
	        limit = 1,
	        groupBy = 'nl_identifier._pageName',
	        default = '',
	    }
	    results = cargo.query( tables, fields, args )
	elseif frame.args['game'] == "New Horizons" then
		tables = 'nh_identifier'
	    fields = "nh_identifier.identifier=identifier"
	    args = {
	        where = "nh_identifier._pageName = \"" .. frame.args['1']:gsub("\'","\\'") .. "\"",
	        limit = 1,
	        groupBy = 'nh_identifier._pageName',
	        default = '',
	    }
	    results = cargo.query( tables, fields, args )
	else
		print = "Game not specified."
		results = {}
	end
	
	-- Comb through every identifer table and return a value if item found.
	if not tableEmpty(results) then
		local data = {}
		local offset = 0
		
		-- Check first gen identifer cargo table
	    local firstGen = cargo.query( 'pg_identifier', "pg_identifier._pageName=pageName,pg_identifier.en_name=name", {where = "pg_identifier.identifier = \"" .. results[1].identifier .. "\"", limit = 100, groupBy = 'pg_identifier._pageName', default = ''} )
	    if not tableEmpty(firstGen) and frame.args['game'] ~= "First gen" then
	    	for r = 1, #firstGen do
	    		data[r] = "<li>[["  .. firstGen[r].pageName .. "|" .. convertCase (firstGen[r].name) .. " (''" .. firstGen[r].pageName:gsub("Item:.*%((.-)%)","%1") .. "'')]]</li>"
	    		offset = offset + r
	    	end
	    end
	    
	    -- Check Wild World identifier cargo table
	    local wildWorld = cargo.query( 'ww_identifier', "ww_identifier._pageName=pageName,ww_identifier.en_name=name", {where = "ww_identifier.identifier = \"" .. results[1].identifier .. "\"", limit = 100, groupBy = 'ww_identifier._pageName', default = ''} )
	    if not tableEmpty(wildWorld) and frame.args['game'] ~= "Wild World" then
	    	for r = 1, #wildWorld do
	    		data[r+offset] = "<li>[["  .. wildWorld[r].pageName .. "|" .. convertCase (wildWorld[r].name) .. " (''Wild World'')]]</li>"
	    		offset = offset + r
	    	end
	    end
	    
	    -- Check New Leaf identifier cargo table
	    local newLeaf = cargo.query( 'nl_identifier', "nl_identifier._pageName=pageName,nl_identifier.en_name=name", {where = "nl_identifier.identifier = \"" .. results[1].identifier .. "\"", limit = 100, groupBy = 'nl_identifier._pageName', default = ''} )
	    if not tableEmpty(newLeaf) and frame.args['game'] ~= "New Leaf" then
	    	for r = 1, #newLeaf do
	    		data[r+offset] = "<li>[["  .. newLeaf[r].pageName .. "|" .. convertCase (newLeaf[r].name) .. " (''New Leaf'')]]</li>"
	    		offset = offset + r
	    	end
	    end
	    
	    -- Check New Horizons identifier cargo table
	    local newHorizons = cargo.query( 'nh_identifier', "nh_identifier._pageName=pageName,nh_identifier.en_name=name", {where = "nh_identifier.identifier = \"" .. results[1].identifier .. "\"", limit = 100, groupBy = 'nh_identifier._pageName', default = ''} )
	    if not tableEmpty(newHorizons) and frame.args['game'] ~= "New Horizons" then
	    	for r = 1, #newHorizons do
	    		data[r+offset] = "<li>[["  .. newHorizons[r].pageName .. "|" .. convertCase (newHorizons[r].name) .. " (''New Horizons'')]]</li>"
	    		offset = offset + r
	    	end
	    end
	    
	    if not tableEmpty(data) then
	    	if not isEmpty(frame.args['hide-section-title']) then
	    		print = print
	    	else
	    		print = print .. "== In other games ==\n"
	    	end
	    	print = print .. "<ul>"
				for r = 1, #data do
					if not isEmpty(data[r]) then
	    				print = print .. data[r]
	    			end
	    		end
	    	print = print .. "</ul>"
	    	if not isEmpty(frame.args['hide-section-title']) then
	    		print = print
	    	else
	    		print = print .. "\n"
	    	end
	    end
	end
	return print
end

return p