Difference between revisions of "Module:Availability"

From Nookipedia, the Animal Crossing wiki
(converting to use arguments)
(Setting vars to local)
 
(7 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
local p = {}
 
local p = {}
data = mw.loadData("Module:Availability/Data")
+
local getArgs = require('Module:Arguments').getArgs
 +
local data = mw.loadData("Module:Availability/Data")
  
 
function setDefault (t, d)
 
function setDefault (t, d)
Line 14: Line 15:
 
end
 
end
 
return t2
 
return t2
end
 
 
local function getArgs(frame)
 
    local args = {}
 
    for key, value in pairs(frame:getParent().args) do
 
        args[key] = value
 
    end
 
    for key, value in pairs(frame.args) do
 
        args[key] = value
 
    end
 
    return args
 
 
end
 
end
  
Line 37: Line 27:
 
     local nb        = args.nb or ''
 
     local nb        = args.nb or ''
 
     local note      = args.note or ''
 
     local note      = args.note or ''
     return p.outputAvailability (args1, args2, args3, args4, text, size, nb, note)
+
    local noimages  = args.noimages or ''
 +
     return p.outputAvailability (args1, args2, args3, args4, note, text, size, nb, noimages)
 
end
 
end
  
function p.outputAvailability (args1, args2, args3, args4, text, size, nb, note)
+
function p.outputAvailability (args1, args2, args3, args4, note, text, size, nb, noimages)
 
local function isEmpty(s)
 
local function isEmpty(s)
 
return s == nil or s == ''
 
return s == nil or s == ''
 
end
 
end
  
game = copyTable(data.game)
+
local game = copyTable(data.game)
 
local print = '<span style="font-size:.9em;">'
 
local print = '<span style="font-size:.9em;">'
 
 
-- Availability with a specific villager --
+
if not isEmpty(args1) then
if (args1 == "Villager") then
+
-- Availability with a specific villager --
setDefault(game," NH Villager Icon.png")
+
if (args1 == "Villager") then
if (args2  == "Lulu (villager)" or args2 == "Lulu (islander)") then
+
setDefault(game," NH Villager Icon.png")
print = print .. '[[File:Lulu ' .. game[args3]
+
if isEmpty(noimages) then
elseif (args2 == "Carmen (mouse)") then
+
if (args2  == "Lulu (anteater)") then
print = print .. '[[File:Carmen ' .. game[args3]
+
print = print .. '[[File:Lulu ' .. game[args3]
else
+
elseif (args2 == "Carmen (mouse)") then
print = print .. '[[File:' .. args2 .. game[args3]
+
print = print .. '[[File:Carmen ' .. game[args3]
end
 
if not isEmpty(size) then
 
print = print .. '|' .. size
 
else
 
print = print .. '|22px'
 
end
 
print = print .. '|link=|alt=]]&nbsp;'
 
if not isEmpty(args4) then
 
print = print .. '[[' .. args4 .. '|' .. args2 .. ']]'
 
else
 
if (args2 == "June" or args2 == "Snooty") then
 
print = print .. '[[' .. args2 .. ' (villager)'
 
else
 
print = print .. '[[' .. args2
 
end
 
if not isEmpty(text) then
 
    print = print .. '|' .. text .. ']]'
 
elseif (args2 == "June" or args2 == "Snooty") then
 
print = print .. '|' .. args2 .. ']]'
 
else
 
print = print .. ']]'
 
end
 
end
 
else
 
-- Availability in terms of RVs --
 
if (args1 == "RV") then
 
if not isEmpty(data.availabilityRV[args2]) and not isEmpty(data.availabilityRV[args2][1]) then
 
print = print .. '[[File:'.. data.availabilityRV[args2][1]
 
else
 
print = print .. '[[File:' .. args2 .. ' NL Villager Icon.png'
 
end
 
if not isEmpty(size) then
 
print = print .. '|' .. size
 
else
 
if not isEmpty(data.availabilityRV[args2]) and not isEmpty(data.availabilityRV[args2][2]) then
 
print = print .. '|' .. data.availabilityRV[args2][2]
 
 
else
 
else
print = print .. '|22px'
+
print = print .. '[[File:' .. args2 .. game[args3]
 
end
 
end
end
 
print = print .. '|link=|alt=]]&nbsp;'
 
if not isEmpty(data.availabilityRV[args2]) and not isEmpty(data.availabilityRV[args2][3]) then
 
    print = print .. '[[' .. data.availabilityRV[args2][3]
 
    if not isEmpty(text) then
 
    print = print .. '|' .. text .. ']]'
 
    else
 
    print = print .. '|' .. data.availabilityRV[args2][4] .. ']]'
 
    end
 
    else
 
    print = print .. '[[' .. args2 .. '#RV'
 
    if not isEmpty(text) then
 
    print = print .. '|' .. text .. ']]'
 
    else
 
    print = print .. '|' .. args2 .. '\'s RV]]'
 
    end
 
end
 
else
 
-- Main availability function --
 
if not isEmpty(data.availability[args1]) and not isEmpty(data.availability[args1][1]) then
 
    print = print .. '[[File:'.. data.availability[args1][1]
 
 
if not isEmpty(size) then
 
if not isEmpty(size) then
 
print = print .. '|' .. size
 
print = print .. '|' .. size
 
else
 
else
print = print .. '|' .. data.availability[args1][2]
+
print = print .. '|22px'
 
end
 
end
 
print = print .. '|link=|alt=]]&nbsp;'
 
print = print .. '|link=|alt=]]&nbsp;'
 
end
 
end
if not isEmpty(data.availability[args1]) and not isEmpty(data.availability[args1][3]) then
+
if not isEmpty(args4) then
    print = print .. '[[' .. data.availability[args1][3]
+
print = print .. '[[' .. args4 .. '|' .. args2 .. ']]'
    if (data.availability[args1][3] == data.availability[args1][4]) then
+
else
    print = print .. ']]'
+
if (args2 == "Snooty") then
    else
+
print = print .. '[[' .. args2 .. ' (villager)'
    if not isEmpty(text) then
+
else
 +
print = print .. '[[' .. args2
 +
end
 +
if not isEmpty(text) then
 +
    print = print .. '|' .. text .. ']]'
 +
elseif (args2 == "Snooty") then
 +
print = print .. '|' .. args2 .. ']]'
 +
else
 +
print = print .. ']]'
 +
end
 +
end
 +
else
 +
-- Availability in terms of RVs --
 +
if (args1 == "RV") then
 +
if isEmpty(noimages) then
 +
if not isEmpty(data.availabilityRV[args2]) and not isEmpty(data.availabilityRV[args2][1]) then
 +
print = print .. '[[File:'.. data.availabilityRV[args2][1]
 +
else
 +
print = print .. '[[File:' .. args2 .. ' NL Villager Icon.png'
 +
end
 +
if not isEmpty(size) then
 +
print = print .. '|' .. size
 +
else
 +
if not isEmpty(data.availabilityRV[args2]) and not isEmpty(data.availabilityRV[args2][2]) then
 +
print = print .. '|' .. data.availabilityRV[args2][2]
 +
else
 +
print = print .. '|22px'
 +
end
 +
end
 +
print = print .. '|link=|alt=]]&nbsp;'
 +
end
 +
if not isEmpty(data.availabilityRV[args2]) and not isEmpty(data.availabilityRV[args2][3]) then
 +
    print = print .. '[[' .. data.availabilityRV[args2][3]
 +
    if not isEmpty(text) then
 
    print = print .. '|' .. text .. ']]'
 
    print = print .. '|' .. text .. ']]'
 
    else
 
    else
    print = print .. '|' .. data.availability[args1][4] .. ']]'
+
    print = print .. '|' .. data.availabilityRV[args2][4] .. ']]'
    end
+
    end
    end
+
    else
    else
+
    print = print .. '[[' .. args2 .. '#RV'
    if not isEmpty(data.availability[args1]) and not isEmpty(data.availability[args1][5]) then
+
    if not isEmpty(text) then
    if not isEmpty(text) then
+
    print = print .. '|' .. text .. ']]'
    print = print .. text
 
 
    else
 
    else
    print = print .. data.availability[args1][5]
+
    print = print .. '|' .. args2 .. '\'s RV]]'
    end
+
    end
    else
+
end
    if not isEmpty(text) then
+
else
    print = print .. text
+
-- Main availability function --
 +
if not isEmpty(data.availability[args1]) and not isEmpty(data.availability[args1][1]) and isEmpty(noimages) then
 +
    print = print .. '[[File:'.. data.availability[args1][1]
 +
if not isEmpty(size) then
 +
print = print .. '|' .. size
 +
else
 +
print = print .. '|' .. data.availability[args1][2]
 +
end
 +
print = print .. '|link=|alt=]]&nbsp;'
 +
end
 +
if not isEmpty(data.availability[args1]) and not isEmpty(data.availability[args1][3]) then
 +
    print = print .. '[[' .. data.availability[args1][3]
 +
    if (data.availability[args1][3] == data.availability[args1][4]) then
 +
    print = print .. ']]'
 
    else
 
    else
    print = print .. args1
+
    if not isEmpty(text) then
    end
+
    print = print .. '|' .. text .. ']]'
    end
+
    else
 +
    print = print .. '|' .. data.availability[args1][4] .. ']]'
 +
    end
 +
    end
 +
    else
 +
    if not isEmpty(data.availability[args1]) and not isEmpty(data.availability[args1][5]) then
 +
    if not isEmpty(text) then
 +
    print = print .. text
 +
    else
 +
    print = print .. data.availability[args1][5]
 +
    end
 +
    else
 +
    if not isEmpty(text) then
 +
    print = print .. text
 +
    else
 +
    print = print .. args1
 +
    end
 +
    end
 +
end
 
end
 
end
 
end
 
end
end
+
-- Note function --
-- Note function --
+
if not isEmpty(note) then
if not isEmpty(note) then
+
print = print .. '<small> (' .. note .. ')</small>'
print = print .. '<small> (' .. note .. ')</small>'
+
end
end
+
print = print .. '</span>'
print = print .. '</span>'
+
-- Line break function --
-- Line break function --
+
if not isEmpty(nb) then
if not isEmpty(nb) then
+
print = print .. ''
print = print .. ''
+
else
else
+
print = print .. '<br/>'
print = print .. '<br/>'
+
end
 
end
 
end
 
return print
 
return print
 
end
 
end
 
return p
 
return p

Latest revision as of 00:47, May 16, 2023

Module documentation (view)


Usage

This Lua module outputs the availability of each source presented and is used for the {{Availability}} template to account for preprocessor node count limits. Data is stored in a table, and can determine how certain variables are used.

To add additional sources, see Module:Availability/Data.

See also

This page is fully-protected to prevent editing by non-administrator users

local p = {}
local getArgs = require('Module:Arguments').getArgs
local data = mw.loadData("Module:Availability/Data")

function setDefault (t, d)
	local mt = {__index = function () return d end}
	setmetatable(t, mt)
end

-- Imported function from https://www.lua.org/pil/13.4.3.html --
function copyTable(t)
	local t2 = {}
	for k,v in pairs(t) do
    	t2[k] = v
	end
	return t2
end

function p.main(frame)
    local args      = getArgs(frame)
    local args1     = args[1] or ''
    local args2     = args[2] or ''
    local args3     = args[3] or ''
    local args4     = args[4] or ''
    local text      = args.text or ''
    local size      = args.size or ''
    local nb        = args.nb or ''
    local note      = args.note or ''
    local noimages  = args.noimages or ''
    return p.outputAvailability (args1, args2, args3, args4, note, text, size, nb, noimages)
end

function p.outputAvailability (args1, args2, args3, args4, note, text, size, nb, noimages)
	local function isEmpty(s)
		return s == nil or s == ''
	end

	local game = copyTable(data.game)
	local print = '<span style="font-size:.9em;">'
	
	if not isEmpty(args1) then
		-- Availability with a specific villager --
		if (args1 == "Villager") then
			setDefault(game," NH Villager Icon.png")
			if isEmpty(noimages) then
				if (args2  == "Lulu (anteater)") then
					print = print .. '[[File:Lulu ' .. game[args3]
				elseif (args2 == "Carmen (mouse)") then
					print = print .. '[[File:Carmen ' .. game[args3]
				else
					print = print .. '[[File:' .. args2 .. game[args3]
				end
				if not isEmpty(size) then
					print = print .. '|' .. size
				else
					print = print .. '|22px'
				end
				print = print .. '|link=|alt=]]&nbsp;'
			end
			if not isEmpty(args4) then
				print = print .. '[[' .. args4 .. '|' .. args2 .. ']]'
			else
				if (args2 == "Snooty") then
					print = print .. '[[' .. args2 .. ' (villager)'
				else
					print = print .. '[[' .. args2
				end
				if not isEmpty(text) then
				    print = print .. '|' .. text .. ']]'
				elseif (args2 == "Snooty") then
					print = print .. '|' .. args2 .. ']]'
				else
					print = print .. ']]'
				end
			end
		else
			-- Availability in terms of RVs --
			if (args1 == "RV") then
				if isEmpty(noimages) then
					if not isEmpty(data.availabilityRV[args2]) and not isEmpty(data.availabilityRV[args2][1]) then
						print = print .. '[[File:'.. data.availabilityRV[args2][1]
					else
						print = print .. '[[File:' .. args2 .. ' NL Villager Icon.png'
					end
					if not isEmpty(size) then
						print = print .. '|' .. size
					else
						if not isEmpty(data.availabilityRV[args2]) and not isEmpty(data.availabilityRV[args2][2]) then
							print = print .. '|' .. data.availabilityRV[args2][2]
						else
							print = print .. '|22px'
						end
					end
					print = print .. '|link=|alt=]]&nbsp;'
				end
				if not isEmpty(data.availabilityRV[args2]) and not isEmpty(data.availabilityRV[args2][3]) then
			    	print = print .. '[[' .. data.availabilityRV[args2][3]
			    	if not isEmpty(text) then
			    		print = print .. '|' .. text .. ']]'
			    	else
			    		print = print .. '|' .. data.availabilityRV[args2][4] .. ']]'
			    	end
			    else
			    	print = print .. '[[' .. args2 .. '#RV'
			    	if not isEmpty(text) then
			    		print = print .. '|' .. text .. ']]'
			    	else
			    		print = print .. '|' .. args2 .. '\'s RV]]'
			    	end
				end
			else
				-- Main availability function --
				if not isEmpty(data.availability[args1]) and not isEmpty(data.availability[args1][1]) and isEmpty(noimages) then
			    	print = print .. '[[File:'.. data.availability[args1][1]
					if not isEmpty(size) then
						print = print .. '|' .. size
					else
						print = print .. '|' .. data.availability[args1][2]
					end
					print = print .. '|link=|alt=]]&nbsp;'
				end
				if not isEmpty(data.availability[args1]) and not isEmpty(data.availability[args1][3]) then
			    	print = print .. '[[' .. data.availability[args1][3]
			    	if (data.availability[args1][3] == data.availability[args1][4]) then
			    		print = print .. ']]'
			    	else
			    		if not isEmpty(text) then
				    		print = print .. '|' .. text .. ']]'
				    	else
				    		print = print .. '|' .. data.availability[args1][4] .. ']]'
			    		end
			    	end
			    else
			    	if not isEmpty(data.availability[args1]) and not isEmpty(data.availability[args1][5]) then
			    		if not isEmpty(text) then
				    		print = print .. text
				    	else
			    			print = print .. data.availability[args1][5]
			    		end
			    	else
			    		if not isEmpty(text) then
				    		print = print .. text
				    	else
			    			print = print .. args1
			    		end
			    	end
				end
			end
		end
		-- Note function --
		if not isEmpty(note) then
			print = print .. '<small> (' .. note .. ')</small>'
		end
		print = print .. '</span>'
		-- Line break function --
		if not isEmpty(nb) then
			print = print .. ''
		else
			print = print .. '<br/>'
		end
	end
	return print
end
return p