webui: save table results search presets. resolves #13618 (#13622)

Co-authored-by: garfield69 <garfield69@outlook.com>
This commit is contained in:
mikeoscar2006 2022-10-04 01:06:39 +05:30 committed by GitHub
parent 056727b36a
commit 1a3e846a0f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 78 additions and 2 deletions

View File

@ -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></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 = $('<button id="jackett-search-results-datatable_savepreset_button" title="Save Search Preset" class="btn btn-success btn-sm" style="margin-left: 10px;"><span class="fa fa-save"></span></button>');
var searchfilterdiv = element.find("#jackett-search-results-datatable_filter");
searchfilterdiv.append(savepresetlabel);
}
},
initComplete: function () {

View File

@ -565,6 +565,7 @@
{{/if}}
, {{/each}}
</p>
<datalist id="jackett-search-saved-presets"></datalist>
<table id="jackett-search-results-datatable" class="dataTable compact cell-border hover stripe">
<thead>
<tr>
@ -754,6 +755,6 @@
</script>
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
<script type="text/javascript" src="../custom.js?changed=20221002"></script>
<script type="text/javascript" src="../custom.js?changed=20221003"></script>
</body>
</html>