From b4a282fb7a06b26cc0888cddd916bfe43f7ef774 Mon Sep 17 00:00:00 2001
From: Arkerthan <arkerthan@gmail.com>
Date: Fri, 1 May 2020 11:30:08 +0200
Subject: [PATCH] convert summary options to new options system

---
 src/js/slaveSummaryWidgets.js       | 22 +++----
 src/uncategorized/summaryOptions.tw | 95 +++++++++++------------------
 2 files changed, 46 insertions(+), 71 deletions(-)

diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js
index 1a250b66c84..f7c636a2bfb 100644
--- a/src/js/slaveSummaryWidgets.js
+++ b/src/js/slaveSummaryWidgets.js
@@ -950,9 +950,10 @@ App.UI.SlaveSummary = function() {
 		return res;
 	}
 
-	function displayOptionsFragment() {
-		const res = document.createDocumentFragment();
-
+	/**
+	 * @param {App.UI.OptionsGroup} optionsGroup
+	 */
+	function addOptions(optionsGroup) {
 		// SAH is "Summarized, Abbreviated, Hidden"
 		const SAHOptions = {
 			"Summarized": 2,
@@ -961,12 +962,11 @@ App.UI.SlaveSummary = function() {
 		};
 
 		function appendOption(name, desc, options) {
-			res.append(App.UI.DOM.Widgets.optionSelector((value) => {
-				V.UI.slaveSummary.abbreviation[name] = value;
-				initDelegates();
-				Engine.play(passage());
-			},
-			options, V.UI.slaveSummary.abbreviation[name], desc));
+			const option = optionsGroup.addOption(desc, name, V.UI.slaveSummary.abbreviation);
+			option.addCallback(() => initDelegates());
+			for (const key in options) {
+				option.addValue(key, options[key]);
+			}
 		}
 
 		function appendSAHOption(name, desc) {
@@ -997,8 +997,6 @@ App.UI.SlaveSummary = function() {
 			"Summarized": 2,
 			"Hidden": 0
 		});
-
-		return res;
 	}
 
 	return {
@@ -1006,6 +1004,6 @@ App.UI.SlaveSummary = function() {
 		settingsChanged: settingsChanged,
 		societyChanged: societyChanged,
 		render: render,
-		displayOptionsFragment: displayOptionsFragment
+		addOptions: addOptions
 	};
 }();
diff --git a/src/uncategorized/summaryOptions.tw b/src/uncategorized/summaryOptions.tw
index c839f964e85..f913886f8ff 100644
--- a/src/uncategorized/summaryOptions.tw
+++ b/src/uncategorized/summaryOptions.tw
@@ -11,51 +11,37 @@
 <<set $nextLink = $storedLink>>
 <<set _passageSwitchHandler = App.EventHandlers.optionsChanged>>
 
+<h1>Summary Options</h1>
+
 <p class="scene-intro">
 	These options will affect the short slave summaries that appear on the main menu and the facility management screens.
 </p>
 
-<h3 style="text-align:center">Main menu features</h3>
-<<options $rulesAssistantMain "Summary Options">>
-	Rules Assistant visibility:
-	<<option 1 "Shown">>
-	<<option 0 "Hidden">>
-<</options>>
-
-<<options $abbreviateSidebar "Summary Options">>
-	Facilities in the sidebar are
-	<<option 2 "Summarized">>
-	<<option 1 "Abbreviated">>
-<</options>>
-
-<h3 style="text-align:center">Main Menu slave sorting</h3>
-<<options $sortSlavesMain "Summary Options">>
-	Sorting main menu options are
-	<<option 1 "Shown">>
-	<<option 0 "Hidden">>
-<</options>>
+<h2>Main menu features</h2>
+
+<<set _options = new App.UI.OptionsGroup()>>
+
+<<run _options.addOption("Rules Assistant visibility", "rulesAssistantMain")
+.addValue("Shown", 1).on().addValue("Hidden", 0).off()>>
+
+<<run _options.addOption("Facilities in the sidebar are", "abbreviateSidebar")
+.addValueList([["Summarized", 2], ["Abbreviated", 1]])>>
+
+<<run _options.addOption("Sorting main menu options are", "sortSlavesMain")
+.addValue("Shown", 1).on().addValue("Hidden", 0).off()>>
 
 <<if $sortSlavesMain > 0>>
-	<<options $sortSlavesOrder "Summary Options">>
-		in
-		<<option "ascending" "Ascending">>
-		<<option "descending" "Descending">>
-	<</options>>
-
-	<<options $sortSlavesBy "Summary Options">>
-		order and are organized by
-		<<option "devotion" "Devotion">>
-		<<option "name" "Name">>
-		<<option "seniority" "Date purchased">>
-		<<option "actualAge" "Age">>
-		<<option "visualAge" "How old they look">>
-		<<option "physicalAge" "Age of their body">>
-		<<option "assignment" "Assignment">>
-		<<option "weeklyIncome" "Weekly Income">>
-	<</options>>
+	<<run _options.addOption("Sorting direction", "sortSlavesOrder")
+	.addValueList([["Ascending", "ascending"], ["Descending", "descending"]])>>
+
+	<<run _options.addOption("Slaves are sorted by", "sortSlavesBy")
+	.addValueList([["Devotion", "devotion"], ["Name", "name"], ["Date purchased", "seniority"], ["Age", "actualAge"], 
+	["How old they look", "visualAge"], ["Age of their body", "physicalAge"], ["Assignment", "assignment"], ["Weekly Income", "weeklyIncome"]])>>
 <</if>>
 
-<h3 style="text-align:center">Individual panels</h3>
+<<print App.UI.DOM.includeDOM(_options.render())>>
+
+<h2>Individual panels</h2>
 Sample summary:
 <<= App.UI.SlaveList.render.listMarkup(
 	[App.Utils.slaveIndexForId($activeSlave.ID)],
@@ -63,35 +49,26 @@ Sample summary:
 	App.UI.SlaveList.SlaveInteract.stdInteract
 )>>
 
-<<options $slavePanelStyle "Summary Options">>
-	Panel style is
-	<<option 0 "None">>
-	<<option 1 "Line Seperators">>
-	<<option 2 "Card">>
-<</options>>
+<<set _options = new App.UI.OptionsGroup()>>
 
-<<= App.UI.DOM.includeDOM(App.UI.SlaveSummary.displayOptionsFragment(), "dof") >>
+<<run _options.addOption("Panel style is", "slavePanelStyle")
+.addValueList([["None", 0], ["Line Seperator", 1], ["Card", 2]])>>
 
-<<options $summaryStats "Summary Options">>
-	Granular slave stat numbers are
-	<<option 1 "Shown">>
-	<<option 0 "Hidden">>
-<</options>>
+<<run App.UI.SlaveSummary.addOptions(_options)>>
 
-<<options $displayAssignments "Summary Options">>
-Main menu assignment shortcuts are
-	<<option 1 "Shown">>
-	<<option 0 "Hidden">>
-<</options>>
+<<run _options.addOption("Granular slave stat numbers are", "summaryStats")
+.addValue("Shown", 1).on().addValue("Hidden", 0).off()>>
+
+<<run _options.addOption("Main menu assignment shortcuts are", "displayAssignments")
+.addValue("Shown", 1).on().addValue("Hidden", 0).off()>>
 
 <<if $showMissingSlaves>>
-	<<options $showMissingSlavesSD "Summary Options">>
-		Missing slave parents are
-		<<option true "Shown">>
-		<<option false "Hidden">>
-	<</options>>
+	<<run _options.addOption("Missing slave parents are", "showMissingSlavesSD")
+	.addValue("Shown", true).on().addValue("Hidden", false).off()>>
 <</if>>
 
+<<print App.UI.DOM.includeDOM(_options.render())>>
+
 <p style="font-style:italic">
 	[[FC Dev's preferred options|Summary Options ][$seeDesk = 0, $seeFCNN = 0, $sortSlavesBy = "devotion",$sortSlavesOrder = "descending",$sortSlavesMain = 0,$rulesAssistantMain = 1, $UI.slaveSummary.abbreviation = {devotion: 1, mental: 1, rules: 1, clothes: 2, health: 1, diet: 1, drugs: 1, hormoneBalance: 1, race: 1, genitalia: 1, physicals: 1, skills: 1, nationality: 1, rulesets: 1, clothes: 0, origins: 0} ,$abbreviateSidebar = 1]]
 </p>
-- 
GitLab