diff --git a/src/Jackett.Common/Content/custom.js b/src/Jackett.Common/Content/custom.js index f62670fae..32288acef 100644 --- a/src/Jackett.Common/Content/custom.js +++ b/src/Jackett.Common/Content/custom.js @@ -870,7 +870,7 @@ function showSearch(selectedIndexer, query, category) { $('#jackett-search-perform').html($('#search-button-ready').html()); var searchResults = $('#searchResults'); searchResults.empty(); - var datatable = updateSearchResultTable(searchResults, data).search('').columns().search('').draw(); + updateSearchResultTable(searchResults, data).search('').columns().search('').draw(); searchResults.find('div.dataTables_filter input').focusWithoutScrolling(); }).fail(function () { $('#jackett-search-perform').html($('#search-button-ready').html()); @@ -879,7 +879,7 @@ function showSearch(selectedIndexer, query, category) { }); var searchTracker = releaseDialog.find("#searchTracker"); - var searchCategory = releaseDialog.find('#searchCategory') + var searchCategory = releaseDialog.find('#searchCategory'); searchCategory.multiselect({ maxHeight: 400, enableFiltering: true, @@ -927,7 +927,7 @@ $.fn.dataTable.ext.search = [ function (settings, data, dataIndex) { if (settings.sInstance != "jackett-search-results-datatable") return true; - var deadfiltercheckbox = $(settings.nTableWrapper).find(".dataTables_deadfilter input") + var deadfiltercheckbox = $(settings.nTableWrapper).find(".dataTables_deadfilter input"); if (!deadfiltercheckbox.length) { return true; } @@ -936,7 +936,7 @@ $.fn.dataTable.ext.search = [ return false; return true; } -] +]; function updateSearchResultTable(element, results) { var resultsTemplate = Handlebars.compile($("#jackett-search-results").html()); @@ -990,6 +990,34 @@ function updateSearchResultTable(element, results) { ], fnPreDrawCallback: function () { var table = this; + + var inputSearch = element.find("input[type=search]"); + 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."); + newInputSearch.on("input", function () { + var newKeywords = []; + var filterTextKeywords = $(this).val().split(" "); + $.each(filterTextKeywords, function(index, keyword) { + if (keyword === "" || keyword === "+" || keyword === "-") + return; + var newKeyword; + if (keyword.startsWith("+")) + newKeyword = $.fn.dataTable.util.escapeRegex(keyword.substring(1)); + else if (keyword.startsWith("-")) + newKeyword = "^((?!" + $.fn.dataTable.util.escapeRegex(keyword.substring(1)) + ").)*$"; + else + newKeyword = $.fn.dataTable.util.escapeRegex(keyword); + newKeywords.push(newKeyword); + }); + var filterText = newKeywords.join(" "); + table.api().search(filterText, true, true).draw(); + }); + inputSearch.replaceWith(newInputSearch); + } + var deadfilterdiv = element.find(".dataTables_deadfilter"); var deadfiltercheckbox = deadfilterdiv.find("input"); if (!deadfiltercheckbox.length) { diff --git a/src/Jackett.Common/Content/index.html b/src/Jackett.Common/Content/index.html index b265d3fc3..e487dd3f3 100644 --- a/src/Jackett.Common/Content/index.html +++ b/src/Jackett.Common/Content/index.html @@ -691,6 +691,6 @@ - +