From 1a3e846a0f9744f00deee8c69b92001bb90c73bb Mon Sep 17 00:00:00 2001
From: mikeoscar2006 <89641725+mikeoscar2006@users.noreply.github.com>
Date: Tue, 4 Oct 2022 01:06:39 +0530
Subject: [PATCH] webui: save table results search presets. resolves #13618
(#13622)
Co-authored-by: garfield69
---
src/Jackett.Common/Content/custom.js | 77 ++++++++++++++++++++++++++-
src/Jackett.Common/Content/index.html | 3 +-
2 files changed, 78 insertions(+), 2 deletions(-)
diff --git a/src/Jackett.Common/Content/custom.js b/src/Jackett.Common/Content/custom.js
index 753a23f0c..cac1d53f5 100644
--- a/src/Jackett.Common/Content/custom.js
+++ b/src/Jackett.Common/Content/custom.js
@@ -1238,6 +1238,59 @@ function clearSearchResultTable(element) {
element.find("#jackett-search-results-datatable_paginate").empty();
}
+function getSavedPresets() {
+ var lsKey = "jackett_saved_presets";
+ if (JSON !== undefined && localStorage !== undefined) {
+ var lsSavedPresets = localStorage.getItem(lsKey);
+ var presets = lsSavedPresets !== null ? JSON.parse(lsSavedPresets) : [];
+ return presets;
+ } else {
+ return [];
+ }
+}
+
+function setSavedPresets(presets) {
+ var lsKey = "jackett_saved_presets";
+ if (JSON !== undefined && localStorage !== undefined) {
+ localStorage.setItem(lsKey, JSON.stringify(presets));
+ }
+}
+
+function setSavePresetsButtonState(table, element, state = false) {
+ var button = element.find("button[id=jackett-search-results-datatable_savepreset_button]")
+ if (state) {
+ button.attr("class", "btn btn-danger btn-sm");
+ button.on("click", function () {
+ var inputSearch = element.find("input[type=search]");
+ var preset = inputSearch.val().trim();
+ if (preset !== "") {
+ var presets = getSavedPresets();
+ if (presets.includes(preset)) {
+ presets = presets.filter(item => item != preset);
+ setSavedPresets(presets);
+ var datalist = element.find("datalist[id=jackett-search-saved-presets]")
+ datalist.empty();
+ table.api().draw();
+ }
+ }
+ });
+ } else {
+ button.attr("class", "btn btn-success btn-sm");
+ button.on("click", function () {
+ var inputSearch = element.find("input[type=search]");
+ var preset = inputSearch.val().trim();
+ if (preset !== "") {
+ var presets = getSavedPresets();
+ if (!presets.includes(preset)) {
+ presets.push(preset);
+ setSavedPresets(presets);
+ table.api().draw();
+ }
+ }
+ });
+ }
+}
+
// dataTable dead torrent filter
$.fn.dataTable.ext.search = [
function (settings, data, dataIndex) {
@@ -1313,16 +1366,34 @@ function updateSearchResultTable(element, results) {
],
fnPreDrawCallback: function () {
var table = this;
+ var datalist = element.find("datalist[id=jackett-search-saved-presets]")
+
+ var presets = getSavedPresets();
+ if (presets.length > 0) {
+ datalist.empty();
+ presets.forEach(preset => {
+ var option = $('');
+ option.attr("value", preset);
+ datalist.append(option);
+ })
+ }
var inputSearch = element.find("input[type=search]");
+ setSavePresetsButtonState(table, element, presets.includes(inputSearch.val().trim()));
+
if (!inputSearch.attr("custom")) {
var newInputSearch = inputSearch.clone();
newInputSearch.attr("custom", "true");
newInputSearch.attr("data-toggle", "tooltip");
newInputSearch.attr("title", "Search query consists of several keywords.\nKeyword starting with \"-\" is considered a negative match.\nKeywords separated by \"|\" are considered as OR filters.");
+ newInputSearch.attr("list", "jackett-search-saved-presets");
newInputSearch.on("input", function () {
var newKeywords = [];
- var filterTextKeywords = $(this).val().split(" ");
+ var filterText = $(this).val().trim();
+ var presets = getSavedPresets();
+ setSavePresetsButtonState(table, element, presets.includes(filterText));
+
+ var filterTextKeywords = filterText.split(" ");
$.each(filterTextKeywords, function (index, keyword) {
if (keyword === "" || keyword === "+" || keyword === "-")
return;
@@ -1352,6 +1423,10 @@ function updateSearchResultTable(element, results) {
table.api().draw();
});
deadfiltercheckbox.prop('checked', settings.deadfilter);
+
+ savepresetlabel = $('');
+ var searchfilterdiv = element.find("#jackett-search-results-datatable_filter");
+ searchfilterdiv.append(savepresetlabel);
}
},
initComplete: function () {
diff --git a/src/Jackett.Common/Content/index.html b/src/Jackett.Common/Content/index.html
index 81d9a28da..cabd769af 100644
--- a/src/Jackett.Common/Content/index.html
+++ b/src/Jackett.Common/Content/index.html
@@ -565,6 +565,7 @@
{{/if}}
, {{/each}}
+