PhantomCaleb (talk | contribs) No edit summary |
PhantomCaleb (talk | contribs) mNo edit summary |
||
Line 4: | Line 4: | ||
local utilsCode = require("Module:UtilsCode") |
local utilsCode = require("Module:UtilsCode") |
||
local utilsGame = require("Module:UtilsGame") |
local utilsGame = require("Module:UtilsGame") |
||
− | local |
+ | local utilsNavigation = require("Module:UtilsNavigation") |
local utilsTable = require("Module:UtilsTable") |
local utilsTable = require("Module:UtilsTable") |
||
Line 73: | Line 73: | ||
table.insert(rows, {title = "Other(s)", content = dplQuery}) |
table.insert(rows, {title = "Other(s)", content = dplQuery}) |
||
end |
end |
||
− | result = result .. |
+ | result = result .. utilsNavigation.CreateRowNavbox(rows, navboxTitle) |
-- else just outputs everything |
-- else just outputs everything |
||
Line 80: | Line 80: | ||
if not (dplQuery == "emptyCategory") then |
if not (dplQuery == "emptyCategory") then |
||
table.insert(rows, {title = "All", content = dplQuery}) |
table.insert(rows, {title = "All", content = dplQuery}) |
||
− | result = result .. |
+ | result = result .. utilsNavigation.CreateRowNavbox(rows, navboxTitle) |
end |
end |
||
end |
end |
Revision as of 00:52, 19 April 2020
Lua error in package.lua at line 80: module 'Module:UtilsCode' not found.
local p = {}
local h = {}
local cargo = mw.ext.cargo
local utilsCode = require("Module:UtilsCode")
local utilsGame = require("Module:UtilsGame")
local utilsNavigation = require("Module:UtilsNavigation")
local utilsTable = require("Module:UtilsTable")
-- See the module for documentation about subcategories.
local SUBCATEGORIES = require("Module:Categories/Subcategories")
function p._CategorizeEntries(frame)
local args = frame:getParent().args
return p.CategorizeEntries(frame.args["plain"], args)
end
function p.CategorizeEntries(plain, lists)
local result = ""
result = result .. p.PlainToNavboxes(plain)
result = result .. p.PlainToCategories(plain)
result = result .. p.GamesToCategories(lists)
return result
end
function p.PlainToNavboxes(plain)
result = ""
local plaintable = mw.text.split(plain, '%s*,%s*')
local navboxTitle = ""
local rows = {}
local rowDisplayName = ""
local notCategories = ""
local notParentCategories = ""
local dplQuery = ""
local dplParameters = '|namespace=|includesubpages=false|skipthispage=no|mode=userformat|format=,%PAGE%,;,|ordermethod=titlewithoutnamespace|noresultsheader=emptyCategory}}'
-- For every category entered in the template
for key, category in ipairs(plaintable) do
rows = {}
if not utilsCode.IsEmpty(category) then
if tonumber(mw.getCurrentFrame():callParserFunction{name = 'PAGESINCATEGORY', args = {category, "R", "pages"}}) <= 100 then
-- Sets the title, which is "[[:Category:X|X]] in {{TLoZ|Series}}"
navboxTitle = "[[:Category:" .. category .. "|" .. category .. "]] in " .. mw.getCurrentFrame():expandTemplate{ title = "TLoZ", args = { "Series" } }
local isPrimaryNav = h.isPrimaryNav(category, plaintable)
-- If subcategories exist, handles that
if not utilsCode.IsEmpty(SUBCATEGORIES[category]) then
notCategories = ""
for key2, subCategory in ipairs(SUBCATEGORIES[category]) do
notParentCategories = ""
notCategories = notCategories .. "|notcategory=" .. subCategory["category"]
if not utilsCode.IsEmpty(subCategory["parents"]) then
for key3, parentCategory in ipairs(subCategory["parents"]) do
notParentCategories = notParentCategories .. "|notcategory=" .. parentCategory
end
end
dplQuery = h.dplToExternalLinks(mw.getCurrentFrame():preprocess("{{#dpl:|category=" .. category .. "|category=" .. subCategory["category"] .. notParentCategories .. dplParameters))
if not (dplQuery == "emptyCategory") then
if utilsCode.IsEmpty(subCategory["display"]) then
rowDisplayName = subCategory["category"]
else
rowDisplayName = subCategory["display"]
end
table.insert(rows, {title = rowDisplayName, content = dplQuery})
end
end
-- Other(s) row
dplQuery = h.dplToExternalLinks(mw.getCurrentFrame():preprocess("{{#dpl:|category=" .. category .. notCategories .. dplParameters))
if not (dplQuery == "emptyCategory") then
table.insert(rows, {title = "Other(s)", content = dplQuery})
end
result = result .. utilsNavigation.CreateRowNavbox(rows, navboxTitle)
-- else just outputs everything
else
dplQuery = h.dplToExternalLinks(mw.getCurrentFrame():preprocess("{{#dpl:|category=" .. category .. dplParameters))
if not (dplQuery == "emptyCategory") then
table.insert(rows, {title = "All", content = dplQuery})
result = result .. utilsNavigation.CreateRowNavbox(rows, navboxTitle)
end
end
end
end
end
return tostring(result)
end
function h.isPrimaryNav(categoryName, categoriesInList)
local categoryConfig = SUBCATEGORIES[categoryName]
if not categoryConfig or not categoryConfig.primary then
return false
end
-- A nav is not primary if a subcategory is present that is primary
for _, subcategory in ipairs(categoryConfig) do
local subcategoryName = subcategory.category
local pageHasSubcategory = utilsTable.keyOf(categoriesInList, subcategoryName)
local subcategoryConfig = SUBCATEGORIES[subcategoryName]
if pageHasSubcategory and subcategoryConfig and subcategoryConfig.primary then
return false
end
end
return true
end
function h.dplToExternalLinks(dplResult)
local result = ""
local firstLink = true
dplResult = mw.text.split(dplResult, '%s*;%s*')
-- Removing the last entry in the table since it's "empty" due to how DPL
-- adds a ";" at the end of each entry instead of just in-between entries
table.remove(dplResult)
for key, link in ipairs(dplResult) do
if firstLink == true then
firstLink = false
else
result = result .. ' <b>·</b> '
end
result = result .. '<span class="plainlinks">[https://zelda.gamepedia.com/' .. mw.getCurrentFrame():callParserFunction{name = 'urlencode', args = {link, "WIKI"}} .. ' ' .. link .. ']</span>'
end
return 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(lists)
local result = ""
local categories = {}
local acceptedLists = {
{parameter = "bosses", display = "Bosses"},
{parameter = "characters", display = "Characters"},
{parameter = "dungeons", display = "Dungeons"},
{parameter = "enemies", display = "Enemies"},
{parameter = "items", display = "Items"},
{parameter = "levels", display = "Levels"},
{parameter = "objects", display = "Objects"},
{parameter = "places", display = "Places"},
{parameter = "playable", display = "Playable Characters"},
{parameter = "songs", display = "Songs"},
{parameter = "stages", display = "Stages"},
{parameter = "sub-bosses", display = "Sub-Bosses"},
}
for key, list in ipairs(acceptedLists) do
if not (utilsCode.IsEmpty(lists[list["parameter"]])) then
for key2, entry in ipairs(mw.text.split(lists[list["parameter"]], '%s*,%s*')) do
table.insert(categories, {list["display"], entry})
end
end
end
for _, game in ipairs(utilsGame.GetSortOrder("canon")) 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