From 6da576dbe4dd933cc385569fbaab234cae21efff Mon Sep 17 00:00:00 2001
From: Andrew Dolgov <noreply@fakecake.org>
Date: Mon, 21 Dec 2020 08:50:34 +0300
Subject: [PATCH] BLACKLISTED_TAGS: use textarea for editing; normalize value
 when saving

---
 classes/pref/prefs.php   | 29 ++++++++++++++++++++++++++---
 themes/compact.css       |  6 ++++++
 themes/compact_night.css |  6 ++++++
 themes/light.css         |  6 ++++++
 themes/light/prefs.less  |  7 +++++++
 themes/night.css         |  6 ++++++
 themes/night_blue.css    |  6 ++++++
 7 files changed, 63 insertions(+), 3 deletions(-)

diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php
index 4e57ea846..bce3c171b 100644
--- a/classes/pref/prefs.php
+++ b/classes/pref/prefs.php
@@ -66,9 +66,13 @@ class Pref_Prefs extends Handler_Protected {
 			]
 		];
 
+		$this->pref_help_bottom = [
+			"BLACKLISTED_TAGS" => __("Never apply these tags automatically (comma-separated list)."),
+		];
+
 		$this->pref_help = [
 			"ALLOW_DUPLICATE_POSTS" => array(__("Allow duplicate articles"), ""),
-			"BLACKLISTED_TAGS" => array(__("Blacklisted tags"), __("Never apply these tags automatically (comma-separated list).")),
+			"BLACKLISTED_TAGS" => array(__("Blacklisted tags"), ""),
 			"DEFAULT_SEARCH_LANGUAGE" => array(__("Default language"), __("Used for full-text search")),
 			"CDM_AUTO_CATCHUP" => array(__("Mark read on scroll"), __("Mark articles as read as you scroll past them")),
 			"CDM_EXPANDED" => array(__("Always expand articles")),
@@ -192,6 +196,12 @@ class Pref_Prefs extends Handler_Protected {
 				case 'USER_CSS_THEME':
 					if (!$need_reload) $need_reload = get_pref($pref_name) != $value;
 					break;
+
+				case 'BLACKLISTED_TAGS':
+					$cats = FeedItem_Common::normalize_categories(explode(",", $value));
+					asort($cats);
+					$value = implode(", ", $cats);
+					break;
 			}
 
 			set_pref($pref_name, $value);
@@ -671,6 +681,19 @@ class Pref_Prefs extends Handler_Protected {
 						$timezones = explode("\n", file_get_contents("lib/timezones.txt"));
 
 						print_select($pref_name, $value, $timezones, 'dojoType="dijit.form.FilteringSelect"');
+
+					} else if ($pref_name == "BLACKLISTED_TAGS") { # TODO: other possible <textarea> prefs go here
+
+						print "<div>";
+
+						print "<textarea dojoType='dijit.form.SimpleTextarea' rows='4'
+							style='width: 500px; font-size : 12px;'
+							name='$pref_name'>$value</textarea><br/>";
+
+						print "<div class='help-text-bottom text-muted'>" . $this->pref_help_bottom[$pref_name] . "</div>";
+
+						print "</div>";
+
 					} else if ($pref_name == "USER_CSS_THEME") {
 
 						$themes = array_merge(glob("themes/*.php"), glob("themes/*.css"), glob("themes.local/*.css"));
@@ -725,8 +748,8 @@ class Pref_Prefs extends Handler_Protected {
 						print "<input type='checkbox' name='$pref_name' $checked $disabled
 							dojoType='dijit.form.CheckBox' id='CB_$pref_name' value='1'>";
 
-					} else if (array_search($pref_name, array('FRESH_ARTICLE_MAX_AGE',
-							'PURGE_OLD_DAYS', 'LONG_DATE_FORMAT', 'SHORT_DATE_FORMAT')) !== false) {
+					} else if (in_array($pref_name, ['FRESH_ARTICLE_MAX_AGE',
+							'PURGE_OLD_DAYS', 'LONG_DATE_FORMAT', 'SHORT_DATE_FORMAT'])) {
 
 						$regexp = ($type_name == 'integer') ? 'regexp="^\d*$"' : '';
 
diff --git a/themes/compact.css b/themes/compact.css
index 2ce41eacc..c2828c587 100644
--- a/themes/compact.css
+++ b/themes/compact.css
@@ -1472,6 +1472,9 @@ body.ttrss_prefs .user-css-editor {
 }
 body.ttrss_prefs fieldset.prefs {
   min-height: 30px;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
 }
 body.ttrss_prefs fieldset.prefs label:first-of-type {
   min-width: 300px;
@@ -1480,6 +1483,9 @@ body.ttrss_prefs fieldset.prefs .help-text {
   display: inline-block;
   margin-left: 10px;
 }
+body.ttrss_prefs fieldset.prefs .help-text-bottom {
+  margin-top: 10px;
+}
 body.ttrss_prefs fieldset.plugin label.description {
   width: 600px;
   margin-right: 150px;
diff --git a/themes/compact_night.css b/themes/compact_night.css
index 4b939a00f..6666787b0 100644
--- a/themes/compact_night.css
+++ b/themes/compact_night.css
@@ -1472,6 +1472,9 @@ body.ttrss_prefs .user-css-editor {
 }
 body.ttrss_prefs fieldset.prefs {
   min-height: 30px;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
 }
 body.ttrss_prefs fieldset.prefs label:first-of-type {
   min-width: 300px;
@@ -1480,6 +1483,9 @@ body.ttrss_prefs fieldset.prefs .help-text {
   display: inline-block;
   margin-left: 10px;
 }
+body.ttrss_prefs fieldset.prefs .help-text-bottom {
+  margin-top: 10px;
+}
 body.ttrss_prefs fieldset.plugin label.description {
   width: 600px;
   margin-right: 150px;
diff --git a/themes/light.css b/themes/light.css
index facd16c05..d2f5aa4ee 100644
--- a/themes/light.css
+++ b/themes/light.css
@@ -1472,6 +1472,9 @@ body.ttrss_prefs .user-css-editor {
 }
 body.ttrss_prefs fieldset.prefs {
   min-height: 30px;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
 }
 body.ttrss_prefs fieldset.prefs label:first-of-type {
   min-width: 300px;
@@ -1480,6 +1483,9 @@ body.ttrss_prefs fieldset.prefs .help-text {
   display: inline-block;
   margin-left: 10px;
 }
+body.ttrss_prefs fieldset.prefs .help-text-bottom {
+  margin-top: 10px;
+}
 body.ttrss_prefs fieldset.plugin label.description {
   width: 600px;
   margin-right: 150px;
diff --git a/themes/light/prefs.less b/themes/light/prefs.less
index 92084a9c8..4d3e93688 100644
--- a/themes/light/prefs.less
+++ b/themes/light/prefs.less
@@ -82,6 +82,9 @@ body.ttrss_prefs {
 
 	fieldset.prefs {
 		min-height : 30px;
+		display : flex;
+		flex-direction : row;
+		align-items: center;
 
 		label:first-of-type {
 			min-width : 300px;
@@ -91,6 +94,10 @@ body.ttrss_prefs {
 			display : inline-block;
 			margin-left : 10px;
 		}
+
+		.help-text-bottom {
+			margin-top : 10px;
+		}
 	}
 
 	fieldset.plugin {
diff --git a/themes/night.css b/themes/night.css
index 88ae685d2..face01932 100644
--- a/themes/night.css
+++ b/themes/night.css
@@ -1473,6 +1473,9 @@ body.ttrss_prefs .user-css-editor {
 }
 body.ttrss_prefs fieldset.prefs {
   min-height: 30px;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
 }
 body.ttrss_prefs fieldset.prefs label:first-of-type {
   min-width: 300px;
@@ -1481,6 +1484,9 @@ body.ttrss_prefs fieldset.prefs .help-text {
   display: inline-block;
   margin-left: 10px;
 }
+body.ttrss_prefs fieldset.prefs .help-text-bottom {
+  margin-top: 10px;
+}
 body.ttrss_prefs fieldset.plugin label.description {
   width: 600px;
   margin-right: 150px;
diff --git a/themes/night_blue.css b/themes/night_blue.css
index b80699747..d5cda927f 100644
--- a/themes/night_blue.css
+++ b/themes/night_blue.css
@@ -1473,6 +1473,9 @@ body.ttrss_prefs .user-css-editor {
 }
 body.ttrss_prefs fieldset.prefs {
   min-height: 30px;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
 }
 body.ttrss_prefs fieldset.prefs label:first-of-type {
   min-width: 300px;
@@ -1481,6 +1484,9 @@ body.ttrss_prefs fieldset.prefs .help-text {
   display: inline-block;
   margin-left: 10px;
 }
+body.ttrss_prefs fieldset.prefs .help-text-bottom {
+  margin-top: 10px;
+}
 body.ttrss_prefs fieldset.plugin label.description {
   width: 600px;
   margin-right: 150px;
-- 
GitLab