diff --git a/src/Jackett/Content/css/bootstrap-multiselect.css b/src/Jackett/Content/css/bootstrap-multiselect.css
new file mode 100644
index 000000000..5acaf9f7a
--- /dev/null
+++ b/src/Jackett/Content/css/bootstrap-multiselect.css
@@ -0,0 +1 @@
+span.multiselect-native-select{position:relative}span.multiselect-native-select select{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px -1px -1px -3px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;left:50%;top:30px}.multiselect-container{position:absolute;list-style-type:none;margin:0;padding:0}.multiselect-container .input-group{margin:5px}.multiselect-container>li{padding:0}.multiselect-container>li>a.multiselect-all label{font-weight:700}.multiselect-container>li.multiselect-group label{margin:0;padding:3px 20px 3px 20px;height:100%;font-weight:700}.multiselect-container>li.multiselect-group-clickable label{cursor:pointer}.multiselect-container>li>a{padding:0}.multiselect-container>li>a>label{margin:0;height:100%;cursor:pointer;font-weight:400;padding:3px 20px 3px 40px}.multiselect-container>li>a>label.radio,.multiselect-container>li>a>label.checkbox{margin:0}.multiselect-container>li>a>label>input[type=checkbox]{margin-bottom:5px}.btn-group>.btn-group:nth-child(2)>.multiselect.btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.form-inline .multiselect-container label.checkbox,.form-inline .multiselect-container label.radio{padding:3px 20px 3px 40px}.form-inline .multiselect-container li a label.checkbox input[type=checkbox],.form-inline .multiselect-container li a label.radio input[type=radio]{margin-left:-20px;margin-right:0}
diff --git a/src/Jackett/Content/custom.js b/src/Jackett/Content/custom.js
index 25d3048ee..2c5a2c555 100644
--- a/src/Jackett/Content/custom.js
+++ b/src/Jackett/Content/custom.js
@@ -724,6 +724,9 @@ function updateReleasesRow(row)
}
function showSearch(selectedIndexer, query, category) {
+ var selectedIndexers = []
+ if (selectedIndexer)
+ selectedIndexers = selectedIndexer.split(",");
$('#select-indexer-modal').remove();
var releaseTemplate = Handlebars.compile($("#jackett-search").html());
var releaseDialog = $(releaseTemplate({
@@ -741,28 +744,30 @@ function showSearch(selectedIndexer, query, category) {
window.location.hash = '';
}) ;
- var setCategories = function (tracker, items) {
+ var setCategories = function (trackers, items) {
var cats = {};
for (var i = 0; i < items.length; i++) {
- if (items[i].configured === true && (items[i].id === tracker || tracker === '')) {
- indexers["'" + items[i].id + "'"] = items[i].name;
- for (var prop in items[i].caps) {
- if (prop < 100000 || tracker)
- cats[prop] = items[i].caps[prop];
+ if (trackers.length == 0 || $.inArray(items[i].id, trackers) !== -1) {
+ for (var j in items[i].caps) {
+ var cat = items[i].caps[j]
+ if (cat.ID < 100000 || trackers.length == 1)
+ cats[cat.ID] = cat.Name;
}
}
}
var select = $('#searchCategory');
- select.html("");
- $.each(cats, function (index, value) {
- select.append($("")
- .attr("value", value["ID"]).text(value["ID"] + ' (' + value["Name"] + ')'));
+ var selected = select.val();
+ var options = []
+ $.each(cats, function (ID, Name) {
+ options.push({ label: ID + ' (' + Name + ')', value: ID });
});
+ select.multiselect('dataprovider', options);
+ select.val(selected).multiselect("refresh");
};
$('#searchTracker').change(jQuery.proxy(function () {
- var trackerId = $('#searchTracker').val();
- setCategories(trackerId, this.items);
+ var trackerIds = $('#searchTracker').val();
+ setCategories(trackerIds, this.items);
}, { items: configuredIndexers }));
var queryField = document.getElementById("searchquery");
@@ -783,18 +788,16 @@ function showSearch(selectedIndexer, query, category) {
var queryObj = {
Query: searchString,
Category: releaseDialog.find('#searchCategory').val(),
- Tracker: releaseDialog.find('#searchTracker').val().replace("'", "").replace("'", ""),
+ Tracker: releaseDialog.find('#searchTracker').val()
};
- window.location.hash = $.param({ search: queryObj.Query, tracker: queryObj.Tracker, category: queryObj.Category});
+ window.location.hash = $.param({ search: queryObj.Query, tracker: queryObj.Tracker.join(","), category: queryObj.Category.join(",") });
$('#jackett-search-perform').html($('#spinner').html());
$('#searchResults div.dataTables_filter input').val("");
clearSearchResultTable($('#searchResults'));
- var trackerId = queryObj.Tracker;
- if (trackerId == null || trackerId == "")
- trackerId = "all";
+ var trackerId = "all";
api.resultsForIndexer(trackerId, queryObj, function (data) {
for (var i = 0; i < data.Results.length; i++) {
var item = data.Results[i];
@@ -814,18 +817,36 @@ function showSearch(selectedIndexer, query, category) {
});
var searchTracker = releaseDialog.find("#searchTracker");
- if (selectedIndexer)
- searchTracker.val(selectedIndexer);
+ var searchCategory = releaseDialog.find('#searchCategory')
+ searchCategory.multiselect({
+ maxHeight: 400,
+ enableFiltering: true,
+ includeSelectAllOption: true,
+ enableCaseInsensitiveFiltering: true,
+ nonSelectedText: 'Any'
+ });
+ if (selectedIndexers)
+ searchTracker.val(selectedIndexers);
searchTracker.trigger("change");
updateSearchResultTable($('#searchResults'), []);
clearSearchResultTable($('#searchResults'));
- releaseDialog.modal("show");
+
+ searchTracker.multiselect({
+ maxHeight: 400,
+ enableFiltering: true,
+ includeSelectAllOption: true,
+ enableCaseInsensitiveFiltering: true,
+ nonSelectedText: 'All'
+ });
+
if (category !== undefined) {
- $('#searchCategory').val(category);
+ searchCategory.val(category.split(","));
+ searchCategory.multiselect("refresh");
}
+ releaseDialog.modal("show");
if (query !== undefined) {
queryField.value = query;
searchButton.click();
diff --git a/src/Jackett/Content/index.html b/src/Jackett/Content/index.html
index 860f3a6dc..802f736a8 100644
--- a/src/Jackett/Content/index.html
+++ b/src/Jackett/Content/index.html
@@ -29,6 +29,7 @@
+
@@ -37,6 +38,7 @@
+
Jackett
@@ -419,14 +421,13 @@
-