diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index c7dc8f4ae1..e045c19f1e 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -594,26 +594,33 @@ proc/admin_notice(var/message, var/rights)
usr << browse(dat, "window=admin2;size=210x280")
return
-/datum/admins/proc/Secrets()
+/datum/admins/proc/Secrets(var/datum/admin_secret_category/active_category = null)
if(!check_rights(0)) return
+ // Print the header with category selection buttons.
var/dat = "The first rule of adminbuse is: you don't talk about the adminbuse.
"
for(var/datum/admin_secret_category/category in admin_secrets.categories)
if(!category.can_view(usr))
continue
- dat += "[category.name]
"
- if(category.desc)
- dat += "[category.desc]
"
- for(var/datum/admin_secret_item/item in category.items)
+ dat += "[category.name] "
+ dat += "
"
+
+ // If a category is selected, print its description and then options
+ if(istype(active_category) && active_category.can_view(usr))
+ dat += "[active_category.name]
"
+ if(active_category.desc)
+ dat += "[active_category.desc]
"
+ for(var/datum/admin_secret_item/item in active_category.items)
if(!item.can_view(usr))
continue
dat += "[item.name()]
"
dat += "
"
- usr << browse(dat, "window=secrets")
+
+ var/datum/browser/popup = new(usr, "secrets", "Secrets", 500, 500)
+ popup.set_content(dat)
+ popup.open()
return
-
-
/////////////////////////////////////////////////////////////////////////////////////////////////admins2.dm merge
//i.e. buttons/verbs
diff --git a/code/modules/admin/admin_secrets.dm b/code/modules/admin/admin_secrets.dm
index 38bebb844a..b6d0abbe1c 100644
--- a/code/modules/admin/admin_secrets.dm
+++ b/code/modules/admin/admin_secrets.dm
@@ -22,6 +22,9 @@ var/datum/admin_secrets/admin_secrets = new()
dd_insertObjectList(category.items, item)
items += item
+//
+// Secret Item Category - Each subtype is a category for organizing secret commands.
+//
/datum/admin_secret_category
var/name = ""
var/desc = ""
@@ -37,6 +40,10 @@ var/datum/admin_secrets/admin_secrets = new()
return 1
return 0
+//
+// Secret Item Datum - Each subtype is a command on the secrets panel.
+// Override execute() with the implementation of the command.
+//
/datum/admin_secret_item
var/name = ""
var/category = null
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 99b3f7a2f4..cf98ede72f 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1644,6 +1644,10 @@
log_and_message_admins("created [number] [english_list(paths)]")
return
+ else if(href_list["admin_secrets_panel"])
+ var/datum/admin_secret_category/AC = locate(href_list["admin_secrets_panel"]) in admin_secrets.categories
+ src.Secrets(AC)
+
else if(href_list["admin_secrets"])
var/datum/admin_secret_item/item = locate(href_list["admin_secrets"]) in admin_secrets.items
item.execute(usr)