Zelda Wiki

Want to contribute to this wiki?
Sign up for an account, and get started!

Come join the Zelda Wiki community Discord server!

READ MORE

Zelda Wiki
Advertisement

Lua error in package.lua at line 80: module 'Module:UtilsCode' not found.


local p = {}
local cargo = mw.ext.cargo
local utilsCode = require("Module:UtilsCode")
local utilsError = require("Module:UtilsError")
local utilsGame = require("Module:UtilsGame")
local utilsLocalization = require('Module:UtilsLocalization')
local utilsString = require('Module:UtilsString')
local utilsTable = require('Module:UtilsTable')

function p._Main (frame)
	local args = frame.args
	return p.Main({game = args["game"], term = args["term"], link = args["link"], plural = args["plural"], display = args["display"], section = args["section"], sort = args["sort"]})
end

function p.Main(args)
	local returnedValue = ""
	
	local fetchedTerm = p.fetchRow({game = args["game"], term = args["term"]})
	if utilsCode.IsEmpty(fetchedTerm) then
		
		local displayedTerm = args["term"]
		if not utilsCode.IsEmpty(args["display"]) then
			displayedTerm = args["display"]
		end
		
		local linkedTerm = args["term"]
		if not utilsCode.IsEmpty(args["section"]) then
			linkedTerm = linkedTerm .. "#" .. args["section"]
		end
		local returnString = "<span class='explain facelift-term-invalid' title='Invalid or missing term'>[[" .. args["term"] .. "|" .. displayedTerm .. "]]</span>"
		if mw.title.getCurrentTitle().isContentPage == true then
			returnString = returnString .. "[[Category:Pages with Invalid or Missing Terms]][[Category:" .. utilsGame.AbbToGame(args["game"]) .. " Pages with Invalid or Missing Terms]]"
		end
		return returnString
	else
		if args["link"] == "link" then
			local gameSub = utilsGame.AbbToBaseGame(args["game"], true)
			returnedValue = returnedValue .. "[[" .. args["term"]
			if not utilsCode.IsEmpty(args["section"]) then
				returnedValue = returnedValue .. "#" .. args["section"]
			elseif (gameSub ~= "Unknown" and args["game"] ~= "Series") then
				returnedValue = returnedValue .. "#" .. gameSub
			end
			returnedValue = returnedValue .. "|"
		else
			returnedValue = returnedValue .. "<span class='term'>"
		end
		
		if not utilsCode.IsEmpty(args["display"]) then
			returnedValue = returnedValue .. args["display"]
		elseif args["plural"] == "plural" then
			returnedValue = returnedValue .. fetchedTerm["plural"]
		else
			returnedValue = returnedValue .. fetchedTerm["term"]
		end
		
		if args["link"] == "link" then
			returnedValue = returnedValue .. "]]"
		else
			returnedValue = returnedValue .. "</span>"
		end
	end
	return returnedValue
end

-- Returns raw term, or nil if none found
function p.fetchTerm(args)
	local row = p.fetchRow({game = args["game"], term = args["term"]})
	if row then
		return row.term
	else
		utilsError.warn(string.format("Invalid or missing term <code>%s</code> for game <code>%s</code>", args.term, args.game))
	end
end

function p._fetchTerm(frame)
	local args = frame.args
	return p.fetchTerm({game = args["game"], term = args["term"]})
end

-- Returns raw plural
function p.fetchPlural(args)
	return p.fetchRow({game = args["game"], term = args["term"]})["plural"]
end

function p._fetchPlural(frame)
	local args = frame.args
	return p.fetchPlural({game = args["game"], term = args["term"]})
end

-- Returns the table row of the specified game for the specified page.
-- Returns the entry for "Series" if not found.
function p.fetchRow(args)
    local tables = 'Terminologies'
    local fields = 'games, term, plural'
    local queryArgs = {
        where = "_pageName = '" .. string.gsub(string.gsub(args["term"], "&#39;", "''"), "'", "''") .. "' AND lang = '" .. utilsLocalization.GetPageLanguage() .. "'"
    }
    local result = cargo.query( tables, fields, queryArgs )
    
    --Looks for the game
	for _, row in pairs(result) do
		local games = utilsString.split(row.games)
		if utilsTable.keyOf(games, args["game"]) then
			return row
		end
	end
	
	--Else, looks for "Series"
	for _, row in pairs(result) do
		local games = utilsString.split(row.games)
		if utilsTable.keyOf(games, "Series") then
			return row
		end
	end
	
	return nil
end

return p
Advertisement