diff --git a/src/Jackett.Common/Content/custom.js b/src/Jackett.Common/Content/custom.js index 980f05120..c48f2be67 100644 --- a/src/Jackett.Common/Content/custom.js +++ b/src/Jackett.Common/Content/custom.js @@ -4,8 +4,8 @@ var indexers = []; var configuredIndexers = []; var unconfiguredIndexers = []; -$.fn.inView = function() { - if(!this.length) return false; +$.fn.inView = function () { + if (!this.length) return false; var rect = this.get(0).getBoundingClientRect(); return ( @@ -23,17 +23,19 @@ $.fn.focusWithoutScrolling = function () { }; $(document).ready(function () { - $.ajaxSetup({ cache: false }); - - Handlebars.registerHelper('if_eq', function(a, b, opts) { - if (a == b) - return opts.fn(this); - else - return opts.inverse(this); + $.ajaxSetup({ + cache: false }); - Handlebars.registerHelper('if_in', function(elem, list, opts) { - if(list.indexOf(elem) > -1) { + Handlebars.registerHelper('if_eq', function (a, b, opts) { + if (a == b) + return opts.fn(this); + else + return opts.inverse(this); + }); + + Handlebars.registerHelper('if_in', function (elem, list, opts) { + if (list.indexOf(elem) > -1) { return opts.fn(this); } @@ -50,11 +52,11 @@ $(document).ready(function () { function openSearchIfNecessary() { const hashArgs = location.hash.substring(1).split('&').reduce((prev, item) => - Object.assign({ - [item.split('=')[0]]: (item.split('=').length < 2 ? - undefined : - decodeURIComponent(item.split('=')[1].replace(/\+/g,'%20'))) - }, prev), {}); + Object.assign({ + [item.split('=')[0]]: (item.split('=').length < 2 ? + undefined : + decodeURIComponent(item.split('=')[1].replace(/\+/g, '%20'))) + }, prev), {}); if ("search" in hashArgs) { showSearch(hashArgs.tracker, hashArgs.search, hashArgs.category); } @@ -147,20 +149,17 @@ function reloadIndexers() { if (item.type == "public") { item.type_label = "success"; - } - else if (item.type == "private") { + } else if (item.type == "private") { item.type_label = "danger"; - } - else if (item.type == "semi-private") { + } else if (item.type == "semi-private") { item.type_label = "warning"; - } - else { + } else { item.type_label = "default"; } - var main_cats_list = item.caps.filter(function(c) { + var main_cats_list = item.caps.filter(function (c) { return c.ID < 100000; - }).map(function(c) { + }).map(function (c) { return c.Name.split("/")[0]; }); item.mains_cats = $.unique(main_cats_list).join(", "); @@ -180,34 +179,40 @@ function reloadIndexers() { function displayConfiguredIndexersList(indexers) { var indexersTemplate = Handlebars.compile($("#configured-indexer-table").html()); - var indexersTable = $(indexersTemplate({ indexers: indexers, total_configured_indexers: indexers.length })); + var indexersTable = $(indexersTemplate({ + indexers: indexers, + total_configured_indexers: indexers.length + })); prepareTestButtons(indexersTable); prepareSearchButtons(indexersTable); prepareSetupButtons(indexersTable); prepareDeleteButtons(indexersTable); prepareCopyButtons(indexersTable); - indexersTable.find("table").dataTable( - { - "stateSave": true, - "stateDuration": 0, - "pageLength": -1, - "lengthMenu": [[10, 20, 50, 100, 250, 500, -1], [10, 20, 50, 100, 250, 500, "All"]], - "order": [[0, "asc"]], - "columnDefs": [ - { - "targets": 0, - "visible": true, - "searchable": true, - "orderable": true - }, - { - "targets": 1, - "visible": true, - "searchable": true, - "orderable": true - } - ] - }); + indexersTable.find("table").dataTable({ + "stateSave": true, + "stateDuration": 0, + "pageLength": -1, + "lengthMenu": [ + [10, 20, 50, 100, 250, 500, -1], + [10, 20, 50, 100, 250, 500, "All"] + ], + "order": [ + [0, "asc"] + ], + "columnDefs": [{ + "targets": 0, + "visible": true, + "searchable": true, + "orderable": true + }, + { + "targets": 1, + "visible": true, + "searchable": true, + "orderable": true + } + ] + }); $('#indexers').empty(); $('#indexers').append(indexersTable); @@ -218,7 +223,10 @@ function displayUnconfiguredIndexersList() { var UnconfiguredIndexersDialog = $($("#select-indexer").html()); var indexersTemplate = Handlebars.compile($("#unconfigured-indexer-table").html()); - var indexersTable = $(indexersTemplate({ indexers: unconfiguredIndexers, total_unconfigured_indexers: unconfiguredIndexers.length })); + var indexersTable = $(indexersTemplate({ + indexers: unconfiguredIndexers, + total_unconfigured_indexers: unconfiguredIndexers.length + })); indexersTable.find('.indexer-setup').each(function (i, btn) { var indexer = unconfiguredIndexers[i]; $(btn).click(function () { @@ -232,126 +240,141 @@ function displayUnconfiguredIndexersList() { $('#select-indexer-modal').modal('hide').on('hidden.bs.modal', function (e) { var indexerId = $(btn).attr("data-id"); api.getIndexerConfig(indexerId, function (data) { - if (data.result !== undefined && data.result == "error") { - doNotify("Error: " + data.error, "danger", "glyphicon glyphicon-alert"); - return; - } - api.updateIndexerConfig(indexerId, data, function (data) { - if (data == undefined) { - reloadIndexers(); - doNotify("Successfully configured " + name, "success", "glyphicon glyphicon-ok"); - } else if (data.result == "error") { - if (data.config) { - populateConfigItems(configForm, data.config); - } - doNotify("Configuration failed: " + data.error, "danger", "glyphicon glyphicon-alert"); - } - }).fail(function (data) { - if(data.responseJSON.error !== undefined) { - var indexEnd = 2048 - "https://github.com/Jackett/Jackett/issues/new?title=[".length - indexerId.length - "] ".length - " (Config)".length; // keep url <= 2k #5104 - var githubrepo = "Jackett/Jackett"; - var githubtext = "this indexer"; - if (data.responseJSON.error.includes("check FlareSolverr logs") || data.responseJSON.error.includes("cookies provided by FlareSolverr are not valid")) { - githubrepo = "FlareSolverr/FlareSolverr"; - githubtext = "FlareSolverr"; - } - doNotify("An error occurred while configuring this indexer
" + data.responseJSON.error.substring(0, indexEnd) + "
Click here to open an issue on GitHub for " + githubtext + ".", "danger", "glyphicon glyphicon-alert", false); - } else { - doNotify("An error occurred while configuring this indexer, is Jackett server running ?", "danger", "glyphicon glyphicon-alert"); - } - }); + if (data.result !== undefined && data.result == "error") { + doNotify("Error: " + data.error, "danger", "glyphicon glyphicon-alert"); + return; + } + api.updateIndexerConfig(indexerId, data, function (data) { + if (data == undefined) { + reloadIndexers(); + doNotify("Successfully configured " + name, "success", "glyphicon glyphicon-ok"); + } else if (data.result == "error") { + if (data.config) { + populateConfigItems(configForm, data.config); + } + doNotify("Configuration failed: " + data.error, "danger", "glyphicon glyphicon-alert"); + } + }).fail(function (data) { + if (data.responseJSON.error !== undefined) { + var indexEnd = 2048 - "https://github.com/Jackett/Jackett/issues/new?title=[".length - indexerId.length - "] ".length - " (Config)".length; // keep url <= 2k #5104 + var githubrepo = "Jackett/Jackett"; + var githubtext = "this indexer"; + if (data.responseJSON.error.includes("check FlareSolverr logs") || data.responseJSON.error.includes("cookies provided by FlareSolverr are not valid")) { + githubrepo = "FlareSolverr/FlareSolverr"; + githubtext = "FlareSolverr"; + } + doNotify("An error occurred while configuring this indexer
" + data.responseJSON.error.substring(0, indexEnd) + "
Click here to open an issue on GitHub for " + githubtext + ".", "danger", "glyphicon glyphicon-alert", false); + } else { + doNotify("An error occurred while configuring this indexer, is Jackett server running ?", "danger", "glyphicon glyphicon-alert"); + } + }); }); }); }); }); - indexersTable.find("table").DataTable( - { - initComplete: function () { - this.api().columns().every(function () { - var column = this; - var headerText = column.header().innerText; + indexersTable.find("table").DataTable({ + initComplete: function () { + var currentTable = this; + this.api().columns().every(function (index, i, j) { + var column = this; + var headerText = column.header().innerText; - if (headerText == 'Language') { - var select = $('') - .appendTo($(column.footer()).empty()) - .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( - $(this).val() - ); + if (headerText == 'Type') { + var select = createDropDownHtml(column, true); - column - .search(val ? '^' + val + '$' : '', true, false) - .draw(); - }); + var columnData = currentTable.api().columns(index + 1).data(); + var distinctValues = [...new Set(columnData[0])]; + distinctValues.forEach(function (distinctVal) { + select.append('') + }); + } else if (headerText == 'Categories') { + var select = createDropDownHtml(column, false); - column.data().unique().sort().each(function (d, j) { - select.append('') + var columnData = []; + column.data().unique().each(function (d, j) { + d.split(',').forEach(function (val) { + columnData.push(val.trim()); }); - } else { - $(column.footer()).empty(); - } - }); - }, - "stateSave": true, - "stateDuration": 0, - "fnStateSaveParams": function (oSettings, sValue) { - sValue.search.search = ""; // don't save the search filter content - return sValue; - }, - "bAutoWidth": false, - "pageLength": -1, - "lengthMenu": [[10, 20, 50, 100, 250, 500, -1], [10, 20, 50, 100, 250, 500, "All"]], - "order": [[0, "asc"]], - "columnDefs": [ - { - "name": "name", - "targets": 0, - "visible": true, - "searchable": true, - "orderable": true - }, - { - "name": "description", - "targets": 1, - "visible": true, - "searchable": true, - "orderable": true - }, - { - "name": "type", - "targets": 2, - "visible": true, - "searchable": true, - "orderable": true - }, - { - "name": "type_string", - "targets": 3, - "visible": false, - "searchable": true, - "orderable": true, - }, - { - "name": "language", - "targets": 4, - "visible": true, - "searchable": true, - "orderable": true - }, - { - "name": "buttons", - "targets": 5, - "visible": true, - "searchable" : false, - "orderable": false + }); + var distinctValues = [...new Set(columnData)]; + distinctValues.sort().forEach(function (distinctVal) { + select.append('') + }); + } else if (headerText == 'Language') { + var select = createDropDownHtml(column, true); + + column.data().unique().sort().each(function (d, j) { + select.append('') + }); + } else { + $(column.footer()).empty(); } - ] - }); + }); + }, + "stateSave": true, + "stateDuration": 0, + "fnStateSaveParams": function (oSettings, sValue) { + sValue.search.search = ""; // don't save the search filter content + return sValue; + }, + "bAutoWidth": false, + "pageLength": -1, + "lengthMenu": [ + [10, 20, 50, 100, 250, 500, -1], + [10, 20, 50, 100, 250, 500, "All"] + ], + "order": [ + [0, "asc"] + ], + "columnDefs": [{ + "name": "name", + "targets": 0, + "visible": true, + "searchable": true, + "orderable": true + }, + { + "name": "description", + "targets": 1, + "visible": true, + "searchable": true, + "orderable": true + }, + { + "name": "type", + "targets": 2, + "visible": true, + "searchable": true, + "orderable": true + }, + { + "name": "type_string", + "targets": 3, + "visible": false, + "searchable": true, + "orderable": true, + }, + { + "name": "language", + "targets": 4, + "visible": true, + "searchable": true, + "orderable": true + }, + { + "name": "buttons", + "targets": 5, + "visible": true, + "searchable": false, + "orderable": false + } + ] + }); var undefindexers = UnconfiguredIndexersDialog.find('#unconfigured-indexers'); undefindexers.append(indexersTable); - UnconfiguredIndexersDialog.on('shown.bs.modal', function() { + UnconfiguredIndexersDialog.on('shown.bs.modal', function () { $(this).find('div.dataTables_filter input').focusWithoutScrolling(); }); @@ -364,6 +387,28 @@ function displayUnconfiguredIndexersList() { UnconfiguredIndexersDialog.modal("show"); } +function createDropDownHtml(column, exactMatch) { + var select = $('') + .appendTo($(column.footer()).empty()) + .on('change', function () { + var val = $.fn.dataTable.util.escapeRegex( + $(this).val() + ); + + if (exactMatch) { + column + .search(val ? '^' + val + '$' : '', true, false) + .draw(); + } else { + column + .search(val ? val : '', true, false) + .draw(); + } + }); + + return select; +} + function copyToClipboard(text) { // create hidden text element, if it doesn't already exist var targetId = "_hiddenCopyText_"; @@ -437,8 +482,8 @@ function prepareSearchButtons(element) { element.find('.indexer-button-search').each(function (i, btn) { var $btn = $(btn); var id = $btn.data("id"); - $btn.click(function() { - window.location.hash = "search&tracker=" + id; + $btn.click(function () { + window.location.hash = "search&tracker=" + id; showSearch(id); }); }); @@ -453,9 +498,8 @@ function prepareSetupButtons(element) { }); } -function updateTestState(id, state, message, parent) -{ - var btn = parent.find(".indexer-button-test[data-id=" +id + "]"); +function updateTestState(id, state, message, parent) { + var btn = parent.find(".indexer-button-test[data-id=" + id + "]"); var sortmsg = message; if (!sortmsg || state == "success") @@ -468,7 +512,9 @@ function updateTestState(id, state, message, parent) if (message) { btn.tooltip("hide"); btn.attr("title", message); - btn.data('bs.tooltip', false).tooltip({ title: message }); + btn.data('bs.tooltip', false).tooltip({ + title: message + }); } var icon = btn.find("span"); @@ -481,7 +527,10 @@ function updateTestState(id, state, message, parent) } else if (state == "inprogres") { icon.addClass("glyphicon-refresh test-inprogres spinner"); } - var dt = $.fn.dataTable.tables({ visible: true, api: true}).rows().invalidate('dom'); + var dt = $.fn.dataTable.tables({ + visible: true, + api: true + }).rows().invalidate('dom'); if (state != "inprogres") dt.draw(); } @@ -503,19 +552,19 @@ function testIndexer(id, notifyResult) { doNotify("Test failed for " + id + ": \n" + data.error, "danger", "glyphicon glyphicon-alert"); } }).fail(function (data) { - updateTestState(id, "error", data.error, indexers); - if(data.responseJSON.error !== undefined && notifyResult) { - var indexEnd = 2048 - "https://github.com/Jackett/Jackett/issues/new?title=[".length - id.length - "] ".length - " (Test)".length; // keep url <= 2k #5104 - var githubrepo = "Jackett/Jackett"; - var githubtext = "this indexer"; - if (data.responseJSON.error.includes("check FlareSolverr logs") || data.responseJSON.error.includes("cookies provided by FlareSolverr are not valid")) { - githubrepo = "FlareSolverr/FlareSolverr"; - githubtext = "FlareSolverr"; + updateTestState(id, "error", data.error, indexers); + if (data.responseJSON.error !== undefined && notifyResult) { + var indexEnd = 2048 - "https://github.com/Jackett/Jackett/issues/new?title=[".length - id.length - "] ".length - " (Test)".length; // keep url <= 2k #5104 + var githubrepo = "Jackett/Jackett"; + var githubtext = "this indexer"; + if (data.responseJSON.error.includes("check FlareSolverr logs") || data.responseJSON.error.includes("cookies provided by FlareSolverr are not valid")) { + githubrepo = "FlareSolverr/FlareSolverr"; + githubtext = "FlareSolverr"; + } + doNotify("An error occurred while testing this indexer
" + data.responseJSON.error.substring(0, indexEnd) + "
Click here to open an issue on GitHub for " + githubtext + ".", "danger", "glyphicon glyphicon-alert", false); + } else { + doNotify("An error occurred while testing indexers, please take a look at indexers with failed test for more informations.", "danger", "glyphicon glyphicon-alert"); } - doNotify("An error occurred while testing this indexer
" + data.responseJSON.error.substring(0, indexEnd) + "
Click here to open an issue on GitHub for " + githubtext + ".", "danger", "glyphicon glyphicon-alert", false); - } else { - doNotify("An error occurred while testing indexers, please take a look at indexers with failed test for more informations.", "danger", "glyphicon glyphicon-alert"); - } }); } @@ -568,13 +617,20 @@ function populateConfigItems(configForm, config) { function newConfigModal(title, config, caps, link, alternativesitelinks, description) { var configTemplate = Handlebars.compile($("#jackett-config-setup-modal").html()); - var configForm = $(configTemplate({ title: title, caps: caps, link: link, description: description })); + var configForm = $(configTemplate({ + title: title, + caps: caps, + link: link, + description: description + })); $("#modals").append(configForm); populateConfigItems(configForm, config); if (alternativesitelinks.length >= 1) { var AlternativeSiteLinksTemplate = Handlebars.compile($("#setup-item-alternativesitelinks").html()); - var template = $(AlternativeSiteLinksTemplate({ "alternativesitelinks": alternativesitelinks })); + var template = $(AlternativeSiteLinksTemplate({ + "alternativesitelinks": alternativesitelinks + })); configForm.find("div[data-id='sitelink']").after(template); template.find("a.alternativesitelink").click(function (a) { $("div[data-id='sitelink'] input").val(this.href); @@ -591,7 +647,9 @@ function getConfigModalJson(configForm) { $el = $(el); var type = $el.data("type"); var id = $el.data("id"); - var itemEntry = { id: id }; + var itemEntry = { + id: id + }; switch (type) { case "hiddendata": itemEntry.value = $el.find(".setup-item-hiddendata input").val(); @@ -608,7 +666,7 @@ function getConfigModalJson(configForm) { case "inputcheckbox": itemEntry.values = []; $el.find(".setup-item-inputcheckbox input:checked").each(function () { - itemEntry.values.push($(this).val()); + itemEntry.values.push($(this).val()); }); case "inputselect": itemEntry.value = $el.find(".setup-item-inputselect select").val(); @@ -641,12 +699,12 @@ function populateSetupForm(indexerId, name, config, caps, link, alternativesitel doNotify("Configuration failed: " + data.error, "danger", "glyphicon glyphicon-alert"); } }).fail(function (data) { - if(data.responseJSON.error !== undefined) { - var indexEnd = 2048 - "https://github.com/Jackett/Jackett/issues/new?title=[".length - indexerId.length - "] ".length - " (Config)".length; // keep url <= 2k #5104 - doNotify("An error occurred while updating this indexer
" + data.responseJSON.error.substring(0, indexEnd) + "
Click here to open an issue on GitHub for this indexer.", "danger", "glyphicon glyphicon-alert", false); - } else { - doNotify("An error occurred while updating this indexer, request to Jackett server failed, is server running ?", "danger", "glyphicon glyphicon-alert"); - } + if (data.responseJSON.error !== undefined) { + var indexEnd = 2048 - "https://github.com/Jackett/Jackett/issues/new?title=[".length - indexerId.length - "] ".length - " (Config)".length; // keep url <= 2k #5104 + doNotify("An error occurred while updating this indexer
" + data.responseJSON.error.substring(0, indexEnd) + "
Click here to open an issue on GitHub for this indexer.", "danger", "glyphicon glyphicon-alert", false); + } else { + doNotify("An error occurred while updating this indexer, request to Jackett server failed, is server running ?", "danger", "glyphicon glyphicon-alert"); + } }).always(function () { $goButton.html(originalBtnText); $goButton.prop('disabled', false); @@ -655,7 +713,7 @@ function populateSetupForm(indexerId, name, config, caps, link, alternativesitel configForm.on('hidden.bs.modal', function (e) { $('#indexers div.dataTables_filter input').focusWithoutScrolling(); - }); + }); configForm.modal("show"); } @@ -696,8 +754,7 @@ function clearNotifications() { $('[data-notify="container"]').remove(); } -function updateReleasesRow(row) -{ +function updateReleasesRow(row) { var labels = $(row).find("span.release-labels"); var TitleLink = $(row).find("td.Title > a"); var IMDBId = $(row).data("imdb"); @@ -764,7 +821,7 @@ function showSearch(selectedIndexer, query, category) { releaseDialog.on('hidden.bs.modal', function (e) { $('#indexers div.dataTables_filter input').focusWithoutScrolling(); window.location.hash = ''; - }) ; + }); var setCategories = function (trackers, items) { var cats = {}; @@ -781,7 +838,10 @@ function showSearch(selectedIndexer, query, category) { var selected = select.val(); var options = [] $.each(cats, function (ID, Name) { - options.push({ label: ID + ' (' + Name + ')', value: ID }); + options.push({ + label: ID + ' (' + Name + ')', + value: ID + }); }); select.multiselect('dataprovider', options); select.val(selected).multiselect("refresh"); @@ -790,7 +850,9 @@ function showSearch(selectedIndexer, query, category) { $('#searchTracker').change(jQuery.proxy(function () { var trackerIds = $('#searchTracker').val(); setCategories(trackerIds, this.items); - }, { items: configuredIndexers })); + }, { + items: configuredIndexers + })); var queryField = document.getElementById("searchquery"); queryField.addEventListener("keyup", function (event) { @@ -814,9 +876,9 @@ function showSearch(selectedIndexer, query, category) { }; window.location.hash = Object.entries({ - search: encodeURIComponent(queryObj.Query).replace(/%20/g,'+'), - tracker: queryObj.Tracker.join(","), - category: queryObj.Category.join(",") + search: encodeURIComponent(queryObj.Query).replace(/%20/g, '+'), + tracker: queryObj.Tracker.join(","), + category: queryObj.Category.join(",") }).map(([k, v], i) => k + '=' + v).join('&'); $('#jackett-search-perform').html($('#spinner').html()); @@ -905,122 +967,128 @@ $.fn.dataTable.ext.search = [ function updateSearchResultTable(element, results) { var resultsTemplate = Handlebars.compile($("#jackett-search-results").html()); element.html($(resultsTemplate(results))); - element.find('tr.jackett-search-results-row').each(function () { updateReleasesRow(this); }); - var settings = { "deadfilter": true }; - var datatable = element.find('table').DataTable( - { - "fnStateSaveParams": function (oSettings, sValue) { - sValue.search.search = ""; // don't save the search filter content - sValue.deadfilter = settings.deadfilter; - return sValue; - }, - "fnStateLoadParams": function (oSettings, sValue) { - if ("deadfilter" in sValue) - settings.deadfilter = sValue.deadfilter; - }, + element.find('tr.jackett-search-results-row').each(function () { + updateReleasesRow(this); + }); + var settings = { + "deadfilter": true + }; + var datatable = element.find('table').DataTable({ + "fnStateSaveParams": function (oSettings, sValue) { + sValue.search.search = ""; // don't save the search filter content + sValue.deadfilter = settings.deadfilter; + return sValue; + }, + "fnStateLoadParams": function (oSettings, sValue) { + if ("deadfilter" in sValue) + settings.deadfilter = sValue.deadfilter; + }, - "dom": "lfr<\"dataTables_deadfilter\">tip", - "stateSave": true, - "stateDuration": 0, - "bAutoWidth": false, - "pageLength": 20, - "lengthMenu": [[10, 20, 50, 100, 250, 500, -1], [10, 20, 50, 100, 250, 500, "All"]], - "order": [[0, "desc"]], - "columnDefs": [ - { - "targets": 0, - "visible": false, - "searchable": false, - "type": 'date' - }, - { - "targets": 1, - "visible": true, - "searchable": false, - "iDataSort": 0 - }, - { - "targets": 4, - "visible": false, - "searchable": false, - "type": 'num' - }, - { - "targets": 5, - "visible": true, - "searchable": false, - "iDataSort": 4 - } - ], - fnPreDrawCallback: function () { - var table = this; + "dom": "lfr<\"dataTables_deadfilter\">tip", + "stateSave": true, + "stateDuration": 0, + "bAutoWidth": false, + "pageLength": 20, + "lengthMenu": [ + [10, 20, 50, 100, 250, 500, -1], + [10, 20, 50, 100, 250, 500, "All"] + ], + "order": [ + [0, "desc"] + ], + "columnDefs": [{ + "targets": 0, + "visible": false, + "searchable": false, + "type": 'date' + }, + { + "targets": 1, + "visible": true, + "searchable": false, + "iDataSort": 0 + }, + { + "targets": 4, + "visible": false, + "searchable": false, + "type": 'num' + }, + { + "targets": 5, + "visible": true, + "searchable": false, + "iDataSort": 4 + } + ], + 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 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); + $.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) { - deadfilterlabel = $('' - ); - deadfilterdiv.append(deadfilterlabel); - deadfiltercheckbox = deadfilterlabel.find("input"); - deadfiltercheckbox.on("change", function () { - settings.deadfilter = this.checked; - table.api().draw(); - }); - deadfiltercheckbox.prop('checked', settings.deadfilter); - } - }, - initComplete: function () { - var count = 0; - this.api().columns().every(function () { - count++; - if (count === 3 || count === 8) { - var column = this; - var select = $('') - .appendTo($(column.footer()).empty()) - .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( - $(this).val() - ); - - column - .search(val ? '^' + val + '$' : '', true, false) - .draw(); - }); - - column.data().unique().sort().each(function (d, j) { - select.append('') - }); - } }); + inputSearch.replaceWith(newInputSearch); } - }); + + var deadfilterdiv = element.find(".dataTables_deadfilter"); + var deadfiltercheckbox = deadfilterdiv.find("input"); + if (!deadfiltercheckbox.length) { + deadfilterlabel = $(''); + deadfilterdiv.append(deadfilterlabel); + deadfiltercheckbox = deadfilterlabel.find("input"); + deadfiltercheckbox.on("change", function () { + settings.deadfilter = this.checked; + table.api().draw(); + }); + deadfiltercheckbox.prop('checked', settings.deadfilter); + } + }, + initComplete: function () { + var count = 0; + this.api().columns().every(function () { + count++; + if (count === 3 || count === 8) { + var column = this; + var select = $('') + .appendTo($(column.footer()).empty()) + .on('change', function () { + var val = $.fn.dataTable.util.escapeRegex( + $(this).val() + ); + + column + .search(val ? '^' + val + '$' : '', true, false) + .draw(); + }); + + column.data().unique().sort().each(function (d, j) { + select.append('') + }); + } + }); + } + }); return datatable; } @@ -1049,6 +1117,7 @@ function bindUIButtons() { $("#modals").empty(); displayUnconfiguredIndexersList(); $('#unconfigured-indexer-datatable tfoot tr').insertAfter($('#unconfigured-indexer-datatable thead tr')); + $('#unconfigured-indexer-datatable').DataTable().search('').columns().search('').draw(); }); $("#jackett-test-all").click(function () { @@ -1067,85 +1136,93 @@ function bindUIButtons() { item.CategoryDesc = insertWordWrap(item.CategoryDesc); } var releaseTemplate = Handlebars.compile($("#jackett-releases").html()); - var item = { releases: data, Title: 'Releases' }; + var item = { + releases: data, + Title: 'Releases' + }; var releaseDialog = $(releaseTemplate(item)); var table = releaseDialog.find('table'); - releaseDialog.find('tr.jackett-releases-row').each(function () { updateReleasesRow(this); }); + releaseDialog.find('tr.jackett-releases-row').each(function () { + updateReleasesRow(this); + }); releaseDialog.on('hidden.bs.modal', function (e) { $('#indexers div.dataTables_filter input').focusWithoutScrolling(); }); - table.DataTable( - { - "stateSave": true, - "stateDuration": 0, - "bAutoWidth": false, - "pageLength": 20, - "lengthMenu": [[10, 20, 50, -1], [10, 20, 50, "All"]], - "order": [[0, "desc"]], - "columnDefs": [ - { - "targets": 0, - "visible": false, - "searchable": false, - "type": 'date' - }, - { - "targets": 1, - "visible": false, - "searchable": false, - "type": 'date' - }, - { - "targets": 2, - "visible": true, - "searchable": false, - "iDataSort": 0 - }, - { - "targets": 3, - "visible": true, - "searchable": false, - "iDataSort": 1 - }, - { - "targets": 6, - "visible": false, - "searchable": false, - "type": 'num' - }, - { - "targets": 7, - "visible": true, - "searchable": false, - "iDataSort": 6 + table.DataTable({ + "stateSave": true, + "stateDuration": 0, + "bAutoWidth": false, + "pageLength": 20, + "lengthMenu": [ + [10, 20, 50, -1], + [10, 20, 50, "All"] + ], + "order": [ + [0, "desc"] + ], + "columnDefs": [{ + "targets": 0, + "visible": false, + "searchable": false, + "type": 'date' + }, + { + "targets": 1, + "visible": false, + "searchable": false, + "type": 'date' + }, + { + "targets": 2, + "visible": true, + "searchable": false, + "iDataSort": 0 + }, + { + "targets": 3, + "visible": true, + "searchable": false, + "iDataSort": 1 + }, + { + "targets": 6, + "visible": false, + "searchable": false, + "type": 'num' + }, + { + "targets": 7, + "visible": true, + "searchable": false, + "iDataSort": 6 + } + ], + initComplete: function () { + var count = 0; + this.api().columns().every(function () { + count++; + if (count === 5 || count === 10) { + var column = this; + var select = $('') + .appendTo($(column.footer()).empty()) + .on('change', function () { + var val = $.fn.dataTable.util.escapeRegex( + $(this).val() + ); + + column + .search(val ? '^' + val + '$' : '', true, false) + .draw(); + }); + + column.data().unique().sort().each(function (d, j) { + select.append('') + }); } - ], - initComplete: function () { - var count = 0; - this.api().columns().every(function () { - count++; - if (count === 5 || count === 10) { - var column = this; - var select = $('') - .appendTo($(column.footer()).empty()) - .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( - $(this).val() - ); - - column - .search(val ? '^' + val + '$' : '', true, false) - .draw(); - }); - - column.data().unique().sort().each(function (d, j) { - select.append('') - }); - } - }); - } - }); + }); + } + }); $("#modals").append(releaseDialog); releaseDialog.modal("show"); }).fail(function () { @@ -1161,7 +1238,9 @@ function bindUIButtons() { $("#view-jackett-logs").click(function () { api.getServerLogs(function (data) { var releaseTemplate = Handlebars.compile($("#jackett-logs").html()); - var item = { logs: data }; + var item = { + logs: data + }; var releaseDialog = $(releaseTemplate(item)); $("#modals").append(releaseDialog); releaseDialog.modal("show"); @@ -1266,9 +1345,7 @@ function bindUIButtons() { function proxyWarning(input) { if (input != null && input.toString().trim() !== "-1") { // disabled = -1 $('#proxy-warning').show(); - } - else - { + } else { $('#proxy-warning').hide(); } -} +} \ No newline at end of file diff --git a/src/Jackett.Common/Content/index.html b/src/Jackett.Common/Content/index.html index dec46f198..e830ce0ba 100644 --- a/src/Jackett.Common/Content/index.html +++ b/src/Jackett.Common/Content/index.html @@ -698,6 +698,6 @@ - +