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 utilsGame = require("Module:UtilsGame")
local utilsNavbox = require("Module:UtilsNavbox")
local utilsTable = require("Module:UtilsTable")

-- This list allows further categorization in the navbox. The module will create
-- a row for all members of the main category that fits both the latter and the
-- one entered here. It will then create a second row for the second category
-- entered here. And so on.
local SUBCATEGORIES = require("Module:Categories/Subcategories")

function p._CategorizeEntries(frame)
	local args = frame:getParent().args
	return p.CategorizeEntries(frame.args["plain"], args["bosses"], args["characters"], args["dungeons"], args["enemies"], args["items"], args["objects"], args["places"], args["songs"], args["stages"], args["sub-bosses"])
end

function p.CategorizeEntries(plain, bosses, characters, dungeons, enemies, items, objects, places, songs, stages, subbosses)
	local result = ""
	result = result .. p.PlainToNavboxes(plain)
	result = result .. p.PlainToCategories(plain)
	result = result .. p.GamesToCategories(bosses, characters, dungeons, enemies, items, objects, places, songs, stages, subbosses)
	return result
end

function p.PlainToNavboxes(plain)
	result = ""
	local plaintable = mw.text.split(plain, '%s*,%s*')
	
	local navboxTitle = ""
	local rows = {}
	local notCategories = ""
	local dplQuery = ""
	
	-- For every category entered in the template
	for key, category in ipairs(plaintable) do
		rows = {}
		if not utilsCode.IsEmpty(category) then
			
			-- Sets the title, which is "[[:Category:X|X]] in {{TLoZ|Series}}"
			navboxTitle = "[[:Category:" .. category .. "|" .. category .. "]] in " .. mw.getCurrentFrame():expandTemplate{ title = "TLoZ", args = { "Series" } }
			
    		-- If subcategories exist, handles that
			if not utilsCode.IsEmpty(SUBCATEGORIES[category]) then
				notCategories = ""
				for key2, subCategory in ipairs(SUBCATEGORIES[category]) do
					notCategories = notCategories .. "|notcategory=" .. subCategory
					dplQuery = mw.getCurrentFrame():preprocess("{{#dpl:|category=" .. category .. "|category=" .. subCategory .. "|namespace=|includesubpages=false|skipthispage=no|mode=inline|inlinetext={{·}}|ordermethod=titlewithoutnamespace|noresultsheader= }}")
					
					if not (dplQuery == " ") then
						table.insert(rows, {title = subCategory, content = dplQuery})
					end
				end
				
				-- Other(s) row
				dplQuery = mw.getCurrentFrame():preprocess("{{#dpl:|category=" .. category .. notCategories .. "|namespace=|includesubpages=false|skipthispage=no|mode=inline|inlinetext={{·}}|ordermethod=titlewithoutnamespace|noresultsheader= }}")
				if not (dplQuery == " ") then
					table.insert(rows, {title = "Other(s)", content = dplQuery})
				end
				result = result .. utilsNavbox.CreateRowNavbox(rows, navboxTitle)
				
			-- else just outputs everything
			else
				dplQuery = mw.getCurrentFrame():preprocess("{{#dpl:|category=" .. category .. "|namespace=|includesubpages=false|skipthispage=no|mode=inline|inlinetext={{·}}|ordermethod=titlewithoutnamespace|noresultsheader= }}")
				if not (dplQuery == " ") then
					result = result .. utilsNavbox.CreateNavbox(dplQuery, navboxTitle)
				end
			end
			
		end
	end
	return tostring(result)
end

function p.PlainToCategories(plain)
	result = ""
	local plaintable = mw.text.split(plain, '%s*,%s*')
	for key, category in ipairs(plaintable) do
		if not utilsCode.IsEmpty(category) then
			result = result .. "[[Category:" .. category .. "]]"
		end
	end
	return result
end

function p.GamesToCategories(bosses, characters, dungeons, enemies, items, objects, places, songs, stages, subbosses)
	local result = ""
	local categories = {}
	local sortOrder = utilsGame.GetSortOrder("canon")

	if not (utilsCode.IsEmpty(bosses)) then
		bosses = mw.text.split(bosses, '%s*,%s*')
		for _, value in ipairs(bosses) do
			table.insert(categories, {"Bosses", value})
		end
	end
	if not (utilsCode.IsEmpty(characters)) then
		characters = mw.text.split(characters, '%s*,%s*')
		for _, value in ipairs(characters) do
			table.insert(categories, {"Characters", value})
		end
	end
	if not (utilsCode.IsEmpty(dungeons)) then
		dungeons = mw.text.split(dungeons, '%s*,%s*')
		for _, value in ipairs(dungeons) do
			table.insert(categories, {"Dungeons", value})
		end
	end
	if not utilsCode.IsEmpty(enemies) then
		enemies = mw.text.split(enemies, '%s*,%s*')
		for _, value in ipairs(enemies) do
			table.insert(categories, {"Enemies", value})
		end
	end
	if not utilsCode.IsEmpty(items) then
		items = mw.text.split(items, '%s*,%s*')
		for _, value in ipairs(items) do
			table.insert(categories, {"Items", value})
		end
	end
	if not (utilsCode.IsEmpty(objects)) then
		objects = mw.text.split(objects, '%s*,%s*')
		for _, value in ipairs(objects) do
			table.insert(categories, {"Objects", value})
		end
	end
	if not (utilsCode.IsEmpty(places)) then
		places = mw.text.split(places, '%s*,%s*')
		for _, value in ipairs(places) do
			table.insert(categories, {"Places", value})
		end
	end
		if not (utilsCode.IsEmpty(songs)) then
		songs = mw.text.split(songs, '%s*,%s*')
		for _, value in ipairs(songs) do
			table.insert(categories, {"Songs", value})
		end
	end
		if not (utilsCode.IsEmpty(stages)) then
		stages = mw.text.split(stages, '%s*,%s*')
		for _, value in ipairs(stages) do
			table.insert(categories, {"Stages", value})
		end
	end
		if not (utilsCode.IsEmpty(subbosses)) then
		subbosses = mw.text.split(subbosses, '%s*,%s*')
		for _, value in ipairs(subbosses) do
			table.insert(categories, {"Sub-Bosses", value})
		end
	end
	
	for _, game in ipairs(sortOrder) do
		for _2, category in ipairs(categories) do
			if game == category[2] then
				result = result .. "[[Category:" .. category[1] .. " in " .. utilsGame.AbbToGame(category[2], "true") .. "]]"
			end
		end
	end
	
	
	return result
end

return p
Advertisement