MannedTooth (talk | contribs) No edit summary |
MannedTooth (talk | contribs) No edit summary |
||
Line 23: | Line 23: | ||
["Hylians"] = {"Hyruleans", "Terminans"}, |
["Hylians"] = {"Hyruleans", "Terminans"}, |
||
["Hyruleans"] = {"Gorons", "Hylians", "Rito", "Zoras"}, |
["Hyruleans"] = {"Gorons", "Hylians", "Rito", "Zoras"}, |
||
+ | ["Materials"] = {"Items in Breath of the Wild", "Items in Hyrule Warriors", "Items in Hyrule Warriors Legends", "Items in Tri Force Heroes"}, |
||
["Terminans"] = {"Gorons", "Hylians", "Zoras"}, |
["Terminans"] = {"Gorons", "Hylians", "Zoras"}, |
||
["Water-Related Enemies"] = {"Enemies", "Sub-Bosses", "Bosses"}, |
["Water-Related Enemies"] = {"Enemies", "Sub-Bosses", "Bosses"}, |
Revision as of 13:10, 31 January 2020
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 CUSTOM_CATEGORIES = {
["Bags"] = {"Bomb Bags", "Wallets"},
["Bat-Like Enemies"] = {"Enemies", "Sub-Bosses", "Bosses"},
["Books"] = {"Comics", "Guides", "Items", "Manga", "Objects"},
["Companions"] = {"Fairies"},
["Fairies"] = {"Great Fairies"},
["Fire-Related Enemies"] = {"Enemies", "Sub-Bosses", "Bosses"},
["Electricity-Related Enemies"] = {"Enemies", "Sub-Bosses", "Bosses"},
["Flying Enemies"] = {"Enemies", "Sub-Bosses", "Bosses"},
["Ice-Related Enemies"] = {"Enemies", "Sub-Bosses", "Bosses"},
["Koholint Islanders"] = {"Animals", "Humans", "Hylians"},
["Hylians"] = {"Hyruleans", "Terminans"},
["Hyruleans"] = {"Gorons", "Hylians", "Rito", "Zoras"},
["Materials"] = {"Items in Breath of the Wild", "Items in Hyrule Warriors", "Items in Hyrule Warriors Legends", "Items in Tri Force Heroes"},
["Terminans"] = {"Gorons", "Hylians", "Zoras"},
["Water-Related Enemies"] = {"Enemies", "Sub-Bosses", "Bosses"},
}
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 custom categories exist, handles that
if not utilsCode.IsEmpty(CUSTOM_CATEGORIES[category]) then
notCategories = ""
for key2, customCategory in ipairs(CUSTOM_CATEGORIES[category]) do
notCategories = notCategories .. "|notcategory=" .. customCategory
dplQuery = mw.getCurrentFrame():preprocess("{{#dpl:|category=" .. category .. "|category=" .. customCategory .. "|namespace=|includesubpages=false|skipthispage=no|mode=inline|inlinetext={{·}}|ordermethod=titlewithoutnamespace|noresultsheader= }}")
if not (dplQuery == " ") then
table.insert(rows, {title = customCategory, 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