summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2023-11-03 08:33:35 +0300
committerAndrew Dolgov <[email protected]>2023-11-03 08:33:35 +0300
commitff4248b09e1bcd48bb6346df123d5de68cf20e8d (patch)
tree0040b2296a78fe4b10baa5ef66f91431ee166f25
parent0b7d021f8eb5d3d44fcc332c128568b1f2512fc4 (diff)
add wip UI/backend stuff to filter feed tree
-rw-r--r--classes/Pref_Feeds.php13
-rw-r--r--index.php1
-rw-r--r--js/App.js3
-rw-r--r--js/Feeds.js55
4 files changed, 62 insertions, 10 deletions
diff --git a/classes/Pref_Feeds.php b/classes/Pref_Feeds.php
index 60da4f18c..36c9bcbc5 100644
--- a/classes/Pref_Feeds.php
+++ b/classes/Pref_Feeds.php
@@ -39,12 +39,7 @@ class Pref_Feeds extends Handler_Protected {
/**
* @return array<int, array<string, bool|int|string>>
*/
- private function get_category_items(int $cat_id): array {
-
- if (clean($_REQUEST['mode'] ?? 0) != 2)
- $search = $_SESSION["prefs_feed_search"] ?? "";
- else
- $search = "";
+ private function get_category_items(int $cat_id, string $search): array {
// first one is set by API
$show_empty_cats = self::_param_to_bool($_REQUEST['force_show_empty'] ?? false) ||
@@ -64,7 +59,7 @@ class Pref_Feeds extends Handler_Protected {
'id' => 'CAT:' . $feed_category->id,
'bare_id' => (int)$feed_category->id,
'name' => $feed_category->title,
- 'items' => $this->get_category_items($feed_category->id),
+ 'items' => $this->get_category_items($feed_category->id, $search),
'checkbox' => false,
'type' => 'category',
'unread' => -1,
@@ -121,7 +116,7 @@ class Pref_Feeds extends Handler_Protected {
if (clean($_REQUEST['mode'] ?? 0) != 2)
$search = $_SESSION["prefs_feed_search"] ?? "";
else
- $search = "";
+ $search = $_REQUEST['search'] ?? '';
$root = array();
$root['id'] = 'root';
@@ -226,7 +221,7 @@ class Pref_Feeds extends Handler_Protected {
'bare_id' => (int) $feed_category->id,
'auxcounter' => -1,
'name' => $feed_category->title,
- 'items' => $this->get_category_items($feed_category->id),
+ 'items' => $this->get_category_items($feed_category->id, $search),
'checkbox' => false,
'type' => 'category',
'unread' => -1,
diff --git a/index.php b/index.php
index b7c039d7a..e9f85264e 100644
--- a/index.php
+++ b/index.php
@@ -263,6 +263,7 @@
<div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcPrefs')"><?= __('Preferences...') ?></div>
<div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcSearch')"><?= __('Search...') ?></div>
+ <div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcFilterFeeds')"><?= __('Search feeds...') ?></div>
<div dojoType="dijit.MenuItem" disabled="1"><?= __('Feed actions:') ?></div>
<div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcAddFeed')"><?= __('Subscribe to feed...') ?></div>
<div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcEditFeed')"><?= __('Edit this feed...') ?></div>
diff --git a/js/App.js b/js/App.js
index 9d3f6a47d..de653e306 100644
--- a/js/App.js
+++ b/js/App.js
@@ -1270,6 +1270,9 @@ const App = {
case "qmcSearch":
Feeds.search();
break;
+ case "qmcFilterFeeds":
+ Feeds.filter();
+ break;
case "qmcAddFeed":
CommonDialogs.subscribeToFeed();
break;
diff --git a/js/Feeds.js b/js/Feeds.js
index a6eecaf81..2cc5586b3 100644
--- a/js/Feeds.js
+++ b/js/Feeds.js
@@ -23,6 +23,7 @@ const Feeds = {
infscroll_in_progress: 0,
infscroll_disabled: 0,
_infscroll_timeout: false,
+ _filter_query: false, // TODO: figure out the UI for this
_search_query: false,
last_search_query: [],
_viewfeed_wait_timeout: false,
@@ -154,6 +155,10 @@ const Feeds = {
toggle: function() {
Element.toggle("feeds-holder");
},
+ cancelFilter: function() {
+ this._filter_query = "";
+ this.reload();
+ },
cancelSearch: function() {
this._search_query = "";
this.reloadCurrent();
@@ -178,8 +183,14 @@ const Feeds = {
dijit.byId("feedTree").destroyRecursive();
}
+ let query = {op: 'Pref_Feeds', method: 'getfeedtree', mode: 2};
+
+ if (this._filter_query) {
+ query = Object.assign(query, this._filter_query);
+ }
+
const store = new dojo.data.ItemFileWriteStore({
- url: "backend.php?op=Pref_Feeds&method=getfeedtree&mode=2"
+ url: "backend.php?" + dojo.objectToQuery(query)
});
// noinspection JSUnresolvedFunction
@@ -683,6 +694,48 @@ const Feeds = {
});
},
+ filter: function() {
+ const dialog = new fox.SingleUseDialog({
+ content: `
+ <form onsubmit='return false'>
+ <section>
+ <fieldset>
+ <input dojoType='dijit.form.ValidationTextBox' id='filter_query'
+ style='font-size : 16px; width : 540px;'
+ placeHolder="${__("Show feeds matching...")}"
+ name='search' type='search' value=''>
+ </fieldset>
+ </section>
+
+ <footer>
+ ${App.FormFields.submit_tag(App.FormFields.icon("search") + " " + __('Search'), {onclick: "App.dialogOf(this).execute()"})}
+ ${App.FormFields.cancel_dialog_tag(__('Cancel'))}
+ </footer>
+ </form>
+ `,
+ title: __("Search feeds"),
+ execute: function () {
+ if (this.validate()) {
+ Feeds._filter_query = this.attr('value');
+
+ this.hide();
+ Feeds.reload();
+ }
+ },
+ });
+
+ const tmph = dojo.connect(dialog, 'onShow', function () {
+ dojo.disconnect(tmph);
+
+ if (Feeds._filter_query && Feeds._filter_query.search) {
+ dijit.byId('filter_query')
+ .attr('value', Feeds._filter_query.search);
+ }
+ });
+
+ dialog.show();
+
+ },
updateRandom: function() {
console.log("in update_random_feed");