summaryrefslogtreecommitdiff
path: root/builtin/filterlist.lua
diff options
context:
space:
mode:
Diffstat (limited to 'builtin/filterlist.lua')
-rw-r--r--builtin/filterlist.lua33
1 files changed, 33 insertions, 0 deletions
diff --git a/builtin/filterlist.lua b/builtin/filterlist.lua
index 906c339df..fd337ae92 100644
--- a/builtin/filterlist.lua
+++ b/builtin/filterlist.lua
@@ -246,3 +246,36 @@ function sort_worlds_alphabetic(this)
return a.name:lower() < b.name:lower()
end)
end
+
+--------------------------------------------------------------------------------
+function sort_mod_list(this)
+
+ table.sort(this.m_processed_list, function(a, b)
+ -- Show game mods at bottom
+ if a.typ ~= b.typ then
+ return b.typ == "game_mod"
+ end
+ -- If in same or no modpack, sort by name
+ if a.modpack == b.modpack then
+ if a.name:lower() == b.name:lower() then
+ return a.name < b.name
+ end
+ return a.name:lower() < b.name:lower()
+ -- Else compare name to modpack name
+ else
+ -- Always show modpack pseudo-mod on top of modpack mod list
+ if a.name == b.modpack then
+ return true
+ elseif b.name == a.modpack then
+ return false
+ end
+
+ local name_a = a.modpack or a.name
+ local name_b = b.modpack or b.name
+ if name_a:lower() == name_b:lower() then
+ return name_a < name_b
+ end
+ return name_a:lower() < name_b:lower()
+ end
+ end)
+end