From b5157f45fd5b3cd3ee88a8f5e78a418f8ecad634 Mon Sep 17 00:00:00 2001
From: pregmodfan <pregmodfan@cock.li>
Date: Fri, 20 Jul 2018 00:08:45 +0300
Subject: [PATCH] custom label multiset and removal through RA, now it's more
 like tagging

---
 src/js/DefaultRules.tw                      | 11 ++++++++---
 src/js/rulesAssistant.tw                    |  1 +
 src/js/rulesAssistantOptions.tw             | 12 ++++++++++++
 src/uncategorized/BackwardsCompatibility.tw |  2 ++
 4 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/src/js/DefaultRules.tw b/src/js/DefaultRules.tw
index 466b15382ee..27a1b54220d 100644
--- a/src/js/DefaultRules.tw
+++ b/src/js/DefaultRules.tw
@@ -2191,9 +2191,14 @@ window.DefaultRules = (function() {
 	}
 	
 	function ProcessLabel(slave, rule) {
-		if (rule.label !== "no default setting" && slave.customLabel !== rule.label) {
-			slave.customLabel = rule.label;
-			r += `<br>${slave.slaveName}'s label has been set to ${rule.label}`;
+		if (rule.label !== "no default setting" && !slave.customLabel.includes("["+rule.label+"]")) {
+			slave.customLabel = slave.customLabel + "[" + rule.label + "]";
+			r += `<br>${slave.slaveName} has been tagged as ${rule.label}`;
+		} 
+
+		if (rule.removeLabel !== "no default setting" && slave.customLabel.includes("["+rule.removeLabel+"]")) {
+			slave.customLabel = slave.customLabel.replace("["+rule.removeLabel+"]", "");
+			r += `<br>${slave.slaveName}'s tag [${rule.removeLabel}] is removed.`;
 		}
 	}
 
diff --git a/src/js/rulesAssistant.tw b/src/js/rulesAssistant.tw
index 8783498ad7f..d7c11628650 100644
--- a/src/js/rulesAssistant.tw
+++ b/src/js/rulesAssistant.tw
@@ -290,6 +290,7 @@ window.emptyDefaultRule = function emptyDefaultRule() {
 			bellyImplantVol: -1,
 			teeth: "no default setting",
 			label: "no default setting",
+			removeLabel: "no default setting",
 			skinColor: "no default setting",
 		}
 	};
diff --git a/src/js/rulesAssistantOptions.tw b/src/js/rulesAssistantOptions.tw
index 1c9de4d5244..e947f7b77f3 100644
--- a/src/js/rulesAssistantOptions.tw
+++ b/src/js/rulesAssistantOptions.tw
@@ -966,6 +966,7 @@ window.rulesAssistantOptions = (function() {
 		constructor() {
 			super("Other Settings");
 			this.appendChild(new LabelList());
+			this.appendChild(new LabelRemoveList());
 		}
 	}
 
@@ -3152,6 +3153,17 @@ window.rulesAssistantOptions = (function() {
 			this.onchange = (value) => current_rule.set.label = value;
 		}
 	}
+
+	class LabelRemoveList extends List {
+		constructor() {
+			const items = [
+				["no default setting"],
+			];
+			super("Remove custom label", items, true);
+			this.setValue(current_rule.set.removeLabel);
+			this.onchange = (value) => current_rule.set.removeLabel = value;
+		}
+	}
 	
 	class SkinColourList extends List {
 		constructor() {
diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw
index fe5beda585e..7ffae04654c 100644
--- a/src/uncategorized/BackwardsCompatibility.tw
+++ b/src/uncategorized/BackwardsCompatibility.tw
@@ -2950,4 +2950,6 @@ Done!
 
 <<run $defaultRules.filter(x => x.set.label === undefined).forEach(x => { x.set.label = "no default setting"; })>>
 
+<<run $defaultRules.filter(x => x.set.removeLabel === undefined).forEach(x => { x.set.removeLabel = "no default setting"; })>>
+
 <<run $defaultRules.filter(x => x.set.skinColour === undefined).forEach(x => { x.set.skinColor = "no default setting"; })>>
-- 
GitLab