diff --git a/gui/slick/css/style.css b/gui/slick/css/style.css index 119a4f9e7371b2df5098d29f3be9c7b34a144516..dd7d31b8f57060db1a9899d235fe0527e1ced587 100644 --- a/gui/slick/css/style.css +++ b/gui/slick/css/style.css @@ -627,7 +627,7 @@ home.mako margin: 0 auto; } -.show { +.show-container { margin: 12px; width: 188px; height: 352px; @@ -644,28 +644,28 @@ home.mako border-top-right-radius: 5px; } -.show .ui-progressbar { +.show-container .ui-progressbar { height: 7px !important; top: -2px; } -.show .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { +.show-container .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { border-bottom-right-radius: 0px; } -.show .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { +.show-container .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { border-bottom-left-radius: 0px; } -.show .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { +.show-container .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { border-top-right-radius: 0px; } -.show .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { +.show-container .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { border-top-left-radius: 0px; } -.show .ui-widget-content { +.show-container .ui-widget-content { border-top: 1px solid #111; border-bottom: 1px solid #111; border-left: 0px; @@ -677,10 +677,10 @@ home.mako .ui-progressbar .progress-20 { border: none; } -.show .progress-20, -.show .progress-40, -.show .progress-60, -.show .progress-80 { +.show-container .progress-20, +.show-container .progress-40, +.show-container .progress-60, +.show-container .progress-80 { border-radius: 0px; height: 7px } diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js index 3bd132b9b4c123325a42a571cf5a3858fda443b4..5d2ff52f91c0cf84361ba6532685534b808d5587 100644 --- a/gui/slick/js/core.js +++ b/gui/slick/js/core.js @@ -1749,6 +1749,16 @@ var SICKRAGE = { $('table').trigger('filterReset'); }); + // Handle filtering in the poster layout + $('#filterShowName').on('input', _.debounce(function (e) { + $('#container, #container-anime').isotope({ + filter: function () { + var name = $('div.show-title', this).text(); + return (name.toLowerCase().indexOf(e.target.value.toLowerCase()) !== -1); + } + }); + }, 500)); + // This needs to be refined to work a little faster. $('.progressbar').each(function(){ var percentage = $(this).data('progress-percentage'); @@ -1776,114 +1786,84 @@ var SICKRAGE = { 6: function(node) { return $(node).find("img").attr("alt"); } }, widgets: ['saveSort', 'zebra', 'stickyHeaders', 'filter', 'columnSelector'], - headers: (function(){ - if(metaToBool('sickbeard.FILTER_ROW')){ - return { - 0: { sorter: 'realISODate' }, - 1: { sorter: 'realISODate' }, - 2: { sorter: 'loadingNames' }, - 4: { sorter: 'quality' }, - 5: { sorter: 'eps' }, - 6: { filter : 'parsed' } - }; - } else { - return { - 0: { sorter: 'realISODate' }, - 1: { sorter: 'realISODate' }, - 2: { sorter: 'loadingNames' }, - 4: { sorter: 'quality' }, - 5: { sorter: 'eps' } - }; - } - }()), - widgetOptions: (function(){ - if(metaToBool('sickbeard.FILTER_ROW')){ - return { - filter_columnFilters: true, // jshint ignore:line - filter_hideFilters : true, // jshint ignore:line - filter_saveFilters : true, // jshint ignore:line - filter_functions : { // jshint ignore:line - 5:function(e, n, f) { - var test = false; - var pct = Math.floor((n % 1) * 1000); - if (f === '') { - test = true; - } else { - var result = f.match(/(<|<=|>=|>)\s(\d+)/i); - if (result) { - if (result[1] === "<") { - if (pct < parseInt(result[2])) { - test = true; - } - } else if (result[1] === "<=") { - if (pct <= parseInt(result[2])) { - test = true; - } - } else if (result[1] === ">=") { - if (pct >= parseInt(result[2])) { - test = true; - } - } else if (result[1] === ">") { - if (pct > parseInt(result[2])) { - test = true; - } - } + headers: { + 0: { sorter: 'realISODate' }, + 1: { sorter: 'realISODate' }, + 2: { sorter: 'loadingNames' }, + 4: { sorter: 'quality' }, + 5: { sorter: 'eps' }, + 6: { filter: 'parsed' } + }, + widgetOptions: { + filter_columnFilters: true, // jshint ignore:line + filter_hideFilters: true, // jshint ignore:line + filter_saveFilters: true, // jshint ignore:line + filter_functions: { // jshint ignore:line + 5: function(e, n, f) { + var test = false; + var pct = Math.floor((n % 1) * 1000); + if (f === '') { + test = true; + } else { + var result = f.match(/(<|<=|>=|>)\s(\d+)/i); + if (result) { + if (result[1] === "<") { + if (pct < parseInt(result[2])) { + test = true; } - - result = f.match(/(\d+)\s(-|to)\s(\d+)/i); - if (result) { - if ((result[2] === "-") || (result[2] === "to")) { - if ((pct >= parseInt(result[1])) && (pct <= parseInt(result[3]))) { - test = true; - } - } + } else if (result[1] === "<=") { + if (pct <= parseInt(result[2])) { + test = true; + } + } else if (result[1] === ">=") { + if (pct >= parseInt(result[2])) { + test = true; } + } else if (result[1] === ">") { + if (pct > parseInt(result[2])) { + test = true; + } + } + } - result = f.match(/(=)?\s?(\d+)\s?(=)?/i); - if (result) { - if ((result[1] === "=") || (result[3] === "=")) { - if (parseInt(result[2]) === pct) { - test = true; - } - } + result = f.match(/(\d+)\s(-|to)\s(\d+)/i); + if (result) { + if ((result[2] === "-") || (result[2] === "to")) { + if ((pct >= parseInt(result[1])) && (pct <= parseInt(result[3]))) { + test = true; } + } + } - if (!isNaN(parseFloat(f)) && isFinite(f)) { - if (parseInt(f) === pct) { - test = true; - } + result = f.match(/(=)?\s?(\d+)\s?(=)?/i); + if (result) { + if ((result[1] === "=") || (result[3] === "=")) { + if (parseInt(result[2]) === pct) { + test = true; } } - return test; } - }, - 'columnSelector_mediaquery': false - }; - } else { - return { - 'filter_columnFilters': false - }; - } - }()), + + if (!isNaN(parseFloat(f)) && isFinite(f)) { + if (parseInt(f) === pct) { + test = true; + } + } + } + return test; + } + }, + 'columnSelector_mediaquery': false + }, sortStable: true, sortAppend: [[2,0]] }); - if ($("#showListTableShows").find("tbody").find("tr").size() > 0){ - $.tablesorter.filter.bindSearch( "#showListTableShows", $('.search') ); - } - - if(metaToBool('sickbeard.ANIME_SPLIT_HOME')){ - if($("#showListTableAnime").find("tbody").find("tr").size() > 0){ - $.tablesorter.filter.bindSearch( "#showListTableAnime", $('.search') ); - } - } - // @TODO we need to check if doing a $('') with a comma would be quicker than a seperate // isotope function for each as it does here $.each([$('#container'), $('#container-anime')], function (){ this.isotope({ - itemSelector: '.show', + itemSelector: '.show-container', sortBy : getMeta('sickbeard.POSTER_SORTBY'), sortAscending: getMeta('sickbeard.POSTER_SORTDIR'), layoutMode: 'masonry', @@ -2102,7 +2082,7 @@ var SICKRAGE = { 'sceneSeason': sceneSeason, 'sceneEpisode': sceneEpisode }, function(data) { - // Set the values we get back + // Set the values we get back if (data.sceneSeason === null || data.sceneEpisode === null) { $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val(''); } else { @@ -2132,7 +2112,7 @@ var SICKRAGE = { 'sceneAbsolute': sceneAbsolute }, function(data) { - // Set the values we get back + // Set the values we get back if (data.sceneAbsolute === null) { $('#sceneAbsolute_' + showId + '_' + forAbsolute).val(''); } else { @@ -2149,7 +2129,7 @@ var SICKRAGE = { } $('.sceneSeasonXEpisode').on('change', function() { - // Strip non-numeric characters + // Strip non-numeric characters $(this).val($(this).val().replace(/[^0-9xX]*/g, '')); var forSeason = $(this).attr('data-for-season'); var forEpisode = $(this).attr('data-for-episode'); @@ -2163,7 +2143,7 @@ var SICKRAGE = { }); $('.sceneAbsolute').on('change', function() { - // Strip non-numeric characters + // Strip non-numeric characters $(this).val($(this).val().replace(/[^0-9xX]*/g, '')); var forAbsolute = $(this).attr('data-for-absolute'); @@ -2586,21 +2566,12 @@ var SICKRAGE = { 8: { sorter: false }, 9: { sorter: false } }, - widgetOptions: (function() { - if (metaToBool('sickbeard.FILTER_ROW')) { - return { - 'filter_columnFilters': true, - 'filter_hideFilters': true, - 'filter_saveFilters': true, - 'columnSelector_mediaquery': false - }; - } else { - return { - 'filter_columnFilters': false, - 'columnSelector_mediaquery': false - }; - } - }()) + widgetOptions: { + 'filter_columnFilters': true, + 'filter_hideFilters': true, + 'filter_saveFilters': true, + 'columnSelector_mediaquery': false + } }); $('#srRoot').ajaxEpSearch(); diff --git a/gui/slick/js/core.min.js b/gui/slick/js/core.min.js index d45697fcb8cca01ffb8e469f39ddd5bf73d86af3..a5daff128c9329d2a48a4561d927926515b33c41 100644 Binary files a/gui/slick/js/core.min.js and b/gui/slick/js/core.min.js differ diff --git a/gui/slick/views/apiBuilder.mako b/gui/slick/views/apiBuilder.mako index c174c1b588ae715d579acc5ca5e3d82d4ebfbbd6..a1aa2b7ae2f6c80dec14c4ddaa3ccb79fe8a34e0 100644 --- a/gui/slick/views/apiBuilder.mako +++ b/gui/slick/views/apiBuilder.mako @@ -34,7 +34,6 @@ <meta data-var="sickbeard.COMING_EPS_LAYOUT" data-content="${sickbeard.COMING_EPS_LAYOUT}"> <meta data-var="sickbeard.COMING_EPS_SORT" data-content="${sickbeard.COMING_EPS_SORT}"> <meta data-var="sickbeard.DATE_PRESET" data-content="${sickbeard.DATE_PRESET}"> - <meta data-var="sickbeard.FILTER_ROW" data-content="${sickbeard.FILTER_ROW}"> <meta data-var="sickbeard.FUZZY_DATING" data-content="${sickbeard.FUZZY_DATING}"> <meta data-var="sickbeard.HISTORY_LAYOUT" data-content="${sickbeard.HISTORY_LAYOUT}"> <meta data-var="sickbeard.HOME_LAYOUT" data-content="${sickbeard.HOME_LAYOUT}"> diff --git a/gui/slick/views/config_general.mako b/gui/slick/views/config_general.mako index 0d74ea107e9cfd7cec3aaa5c07175684e1ce04b0..d0f4f429b2561ed9432430f5bf201600fa2790fc 100644 --- a/gui/slick/views/config_general.mako +++ b/gui/slick/views/config_general.mako @@ -271,18 +271,6 @@ </span> </label> </div> - <div class="field-pair"> - <label for="filter_row"> - <span class="component-title">Filter Row</span> - <span class="component-desc"> - <input type="checkbox" name="filter_row" id="filter_row" ${('', 'checked="checked"')[bool(sickbeard.FILTER_ROW)]}/> - <p>Add a filter row to the show display on the home page</p> - <p>Supports =, >, >=, <=, <, xx to yy , xx - yy</p> - <p><b>Note:</b> =, >, >=, <=, < should be first, followed by a space, then the value.</p> - <p>Examples: '> 90', '= 100', '0 to 99'</p> - </span> - </label> - </div> <div class="field-pair"> <label for="coming_eps_missed_range"> <span class="component-title">Missed episodes range</span> diff --git a/gui/slick/views/home.mako b/gui/slick/views/home.mako index c6a92c078aac5feb51af03f11ce1224c15a99084..cf048477e967e2936b383f92d7ad1c788939f3d3 100644 --- a/gui/slick/views/home.mako +++ b/gui/slick/views/home.mako @@ -19,19 +19,21 @@ <div id="HomeLayout" class="pull-right hidden-print" style="margin-top: -40px;"> % if sickbeard.HOME_LAYOUT != 'poster': + <span> <button id="popover" type="button" class="btn btn-inline">Select Columns <b class="caret"></b></button> - % endif - - % if sickbeard.HOME_LAYOUT != 'poster': + </span> - <span> Search: - <input class="search form-control form-control-inline input-sm input200" type="search" data-column="2" placeholder="Search Show Name"> - <button type="button" class="resetsorting btn btn-inline">Reset Search</button> + <span> + <button type="button" class="resetsorting btn btn-inline">Clear Filter(s)</button> </span> % endif % if sickbeard.HOME_LAYOUT == 'poster': + <span> + <input id="filterShowName" class="form-control form-control-inline input-sm input200" type="search" placeholder="Filter Show Name"> + </span> + <span> Sort By: <select id="postersort" class="form-control form-control-inline input-sm"> <option value="name" data-sort="${srRoot}/setPosterSortBy/?sort=name" ${('', 'selected="selected"')[sickbeard.POSTER_SORTBY == 'name']}>Name</option> @@ -71,7 +73,7 @@ <div class="posterview"> % for curLoadingShow in sickbeard.showQueueScheduler.action.loadingShowList: % if curLoadingShow.show == None: - <div class="show" data-name="0" data-date="010101" data-network="0" data-progress="101"> + <div class="show-container" data-name="0" data-date="010101" data-network="0" data-progress="101"> <img alt="" title="${curLoadingShow.show_name}" class="show-image" style="border-bottom: 1px solid #111;" src="${srRoot}/images/poster.png" /> <div class="show-details"> <div class="show-add">Loading... (${curLoadingShow.show_name})</div> @@ -144,7 +146,7 @@ elif 'nded' in display_status: data_date = '5000000100.0' %> - <div class="show" id="show${curShow.indexerid}" data-name="${curShow.name}" data-date="${data_date}" data-network="${curShow.network}" data-progress="${progressbar_percent}"> + <div class="show-container" id="show${curShow.indexerid}" data-name="${curShow.name}" data-date="${data_date}" data-network="${curShow.network}" data-progress="${progressbar_percent}"> <div class="show-image"> <a href="${srRoot}/home/displayShow?show=${curShow.indexerid}"><img alt="" class="show-image" src="${srRoot}/showPoster/?show=${curShow.indexerid}&which=poster_thumb" /></a> </div> diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako index d1bcc84bf59e367f31a8cefa795a3b9d5ad8df53..10e5c24fd70ef57636f3e748249078c8e6664059 100644 --- a/gui/slick/views/layouts/main.mako +++ b/gui/slick/views/layouts/main.mako @@ -49,7 +49,6 @@ <meta data-var="sickbeard.COMING_EPS_LAYOUT" data-content="${sickbeard.COMING_EPS_LAYOUT}"> <meta data-var="sickbeard.COMING_EPS_SORT" data-content="${sickbeard.COMING_EPS_SORT}"> <meta data-var="sickbeard.DATE_PRESET" data-content="${sickbeard.DATE_PRESET}"> - <meta data-var="sickbeard.FILTER_ROW" data-content="${sickbeard.FILTER_ROW}"> <meta data-var="sickbeard.FUZZY_DATING" data-content="${sickbeard.FUZZY_DATING}"> <meta data-var="sickbeard.HISTORY_LAYOUT" data-content="${sickbeard.HISTORY_LAYOUT}"> <meta data-var="sickbeard.HOME_LAYOUT" data-content="${sickbeard.HOME_LAYOUT}"> diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index 632545bdd400c31a0eeb013753f1f235ef85e5d8..abd3fa33099b42b19ee7006d7c4a5af7d08ca0ad 100644 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -509,7 +509,6 @@ TIMEZONE_DISPLAY = None THEME_NAME = None POSTER_SORTBY = None POSTER_SORTDIR = None -FILTER_ROW = True USE_SUBTITLES = False SUBTITLES_LANGUAGES = [] @@ -606,7 +605,7 @@ def initialize(consoleLogging=True): USE_EMAIL, EMAIL_HOST, EMAIL_PORT, EMAIL_TLS, EMAIL_USER, EMAIL_PASSWORD, EMAIL_FROM, EMAIL_NOTIFY_ONSNATCH, EMAIL_NOTIFY_ONDOWNLOAD, EMAIL_NOTIFY_ONSUBTITLEDOWNLOAD, EMAIL_LIST, \ USE_LISTVIEW, METADATA_KODI, METADATA_KODI_12PLUS, METADATA_MEDIABROWSER, METADATA_PS3, metadata_provider_dict, \ NEWZBIN, NEWZBIN_USERNAME, NEWZBIN_PASSWORD, GIT_PATH, MOVE_ASSOCIATED_FILES, SYNC_FILES, POSTPONE_IF_SYNC_FILES, POSTPONE_IF_NO_SUBS, dailySearchScheduler, NFO_RENAME, \ - GUI_NAME, HOME_LAYOUT, HISTORY_LAYOUT, DISPLAY_SHOW_SPECIALS, COMING_EPS_LAYOUT, COMING_EPS_SORT, COMING_EPS_DISPLAY_PAUSED, COMING_EPS_MISSED_RANGE, FUZZY_DATING, TRIM_ZERO, DATE_PRESET, TIME_PRESET, TIME_PRESET_W_SECONDS, THEME_NAME, FILTER_ROW, \ + GUI_NAME, HOME_LAYOUT, HISTORY_LAYOUT, DISPLAY_SHOW_SPECIALS, COMING_EPS_LAYOUT, COMING_EPS_SORT, COMING_EPS_DISPLAY_PAUSED, COMING_EPS_MISSED_RANGE, FUZZY_DATING, TRIM_ZERO, DATE_PRESET, TIME_PRESET, TIME_PRESET_W_SECONDS, THEME_NAME, \ POSTER_SORTBY, POSTER_SORTDIR, HISTORY_LIMIT, CREATE_MISSING_SHOW_DIRS, ADD_SHOWS_WO_DIR, \ METADATA_WDTV, METADATA_TIVO, METADATA_MEDE8ER, IGNORE_WORDS, TRACKERS_LIST, IGNORED_SUBS_LIST, REQUIRE_WORDS, CALENDAR_UNPROTECTED, CALENDAR_ICONS, NO_RESTART, \ USE_SUBTITLES, SUBTITLES_LANGUAGES, SUBTITLES_DIR, SUBTITLES_SERVICES_LIST, SUBTITLES_SERVICES_ENABLED, SUBTITLES_HISTORY, SUBTITLES_FINDER_FREQUENCY, SUBTITLES_MULTI, EMBEDDED_SUBTITLES_ALL, SUBTITLES_EXTRA_SCRIPTS, subtitlesFinderScheduler, \ @@ -1211,7 +1210,6 @@ def initialize(consoleLogging=True): TIMEZONE_DISPLAY = check_setting_str(CFG, 'GUI', 'timezone_display', 'local') POSTER_SORTBY = check_setting_str(CFG, 'GUI', 'poster_sortby', 'name') POSTER_SORTDIR = check_setting_int(CFG, 'GUI', 'poster_sortdir', 1) - FILTER_ROW = bool(check_setting_int(CFG, 'GUI', 'filter_row', 1)) DISPLAY_ALL_SEASONS = bool(check_setting_int(CFG, 'General', 'display_all_seasons', 1)) # initialize NZB and TORRENT providers @@ -2134,7 +2132,6 @@ def save_config(): new_config['GUI']['timezone_display'] = TIMEZONE_DISPLAY new_config['GUI']['poster_sortby'] = POSTER_SORTBY new_config['GUI']['poster_sortdir'] = POSTER_SORTDIR - new_config['GUI']['filter_row'] = int(FILTER_ROW) new_config['Subtitles'] = {} new_config['Subtitles']['use_subtitles'] = int(USE_SUBTITLES) diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index 8c45c22159393d03c960bb685b26ffa945284ef0..76d824ba05bfd16213686048fb4ab7f7c420784e 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -3707,7 +3707,7 @@ class ConfigGeneral(Config): handle_reverse_proxy=None, sort_article=None, auto_update=None, notify_on_update=None, proxy_setting=None, proxy_indexers=None, anon_redirect=None, git_path=None, git_remote=None, calendar_unprotected=None, calendar_icons=None, debug=None, ssl_verify=None, no_restart=None, coming_eps_missed_range=None, - filter_row=None, fuzzy_dating=None, trim_zero=None, date_preset=None, date_preset_na=None, time_preset=None, + fuzzy_dating=None, trim_zero=None, date_preset=None, date_preset_na=None, time_preset=None, indexer_timeout=None, download_url=None, rootDir=None, theme_name=None, default_page=None, git_reset=None, git_username=None, git_password=None, git_autoissues=None, display_all_seasons=None): @@ -3763,7 +3763,6 @@ class ConfigGeneral(Config): sickbeard.WEB_USERNAME = web_username sickbeard.WEB_PASSWORD = web_password - sickbeard.FILTER_ROW = config.checkbox_to_value(filter_row) sickbeard.FUZZY_DATING = config.checkbox_to_value(fuzzy_dating) sickbeard.TRIM_ZERO = config.checkbox_to_value(trim_zero)