From 31cf4bbee917ad48f2db4552f1573fab90ef717b Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Wed, 18 Nov 2015 17:21:34 +1030
Subject: [PATCH] move more js to core function

---
 gui/slick/js/core.js                        | 566 +++++++++++++++++++-
 gui/slick/js/core.min.js                    | Bin 48102 -> 58424 bytes
 gui/slick/js/failedDownloads.js             |  49 --
 gui/slick/js/new/displayShow.js             | 278 ----------
 gui/slick/js/new/history.js                 |  40 --
 gui/slick/js/new/home.js                    | 195 -------
 gui/slick/js/new/home_postprocess.js        |   1 -
 gui/slick/js/new/manage.js                  |   2 -
 gui/slick/js/new/manage_backlogOverview.js  |   3 -
 gui/slick/js/new/manage_failedDownloads.js  |   3 -
 gui/slick/js/new/manage_massEdit.js         |   0
 gui/slick/views/displayShow.mako            |   1 -
 gui/slick/views/home.mako                   |   3 -
 gui/slick/views/manage_failedDownloads.mako |   4 -
 sickbeard/webserve.py                       |  13 +-
 15 files changed, 573 insertions(+), 585 deletions(-)
 delete mode 100644 gui/slick/js/failedDownloads.js
 delete mode 100644 gui/slick/js/new/displayShow.js
 delete mode 100644 gui/slick/js/new/history.js
 delete mode 100644 gui/slick/js/new/home.js
 delete mode 100644 gui/slick/js/new/home_postprocess.js
 delete mode 100644 gui/slick/js/new/manage.js
 delete mode 100644 gui/slick/js/new/manage_backlogOverview.js
 delete mode 100644 gui/slick/js/new/manage_failedDownloads.js
 delete mode 100644 gui/slick/js/new/manage_massEdit.js

diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js
index 12675949b..2fb725650 100644
--- a/gui/slick/js/core.js
+++ b/gui/slick/js/core.js
@@ -3,7 +3,7 @@
 var srRoot = getMeta('srRoot'),
     themeSpinner = getMeta('themeSpinner'),
     anonURL = getMeta('anonURL'),
-    topImageHtml = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />',
+    topImageHtml = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />', // jshint ignore:line
     loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
 
 var configSuccess = function(){
@@ -1766,6 +1766,478 @@ var SICKRAGE = {
             console.log('This function need to be filled with ConfigProviders.js but can\'t be as we\'ve got scope issues currently.');
         }
     },
+    home: {
+        init: function(){
+
+        },
+        index: function(){
+            // Resets the tables sorting, needed as we only use a single call for both tables in tablesorter
+            $('.resetsorting').on('click', function(){
+                $('table').trigger('filterReset');
+            });
+
+            // This needs to be refined to work a little faster.
+            $('.progressbar').each(function(){
+                var percentage = $(this).data('progress-percentage');
+                var classToAdd = percentage === 100 ? 100 : percentage > 80 ? 80 : percentage > 60 ? 60 : percentage > 40 ? 40 : 20;
+                $(this).progressbar({ value:  percentage });
+                if($(this).data('progress-text')) {
+                    $(this).append('<div class="progressbarText" title="' + $(this).data('progress-tip') + '">' + $(this).data('progress-text') + '</div>');
+                }
+                $(this).find('.ui-progressbar-value').addClass('progress-' + classToAdd);
+            });
+
+            $("img#network").on('error', function(){
+                $(this).parent().text($(this).attr('alt'));
+                $(this).remove();
+            });
+
+            $("#showListTableShows:has(tbody tr), #showListTableAnime:has(tbody tr)").tablesorter({
+                sortList: [[7,1],[2,0]],
+                textExtraction: {
+                    0: function(node) { return $(node).find('time').attr('datetime'); },
+                    1: function(node) { return $(node).find('time').attr('datetime'); },
+                    3: function(node) { return $(node).find("span").prop("title").toLowerCase(); },
+                    4: function(node) { return $(node).find("span").text().toLowerCase(); },
+                    5: function(node) { return $(node).find("span:first").text(); },
+                    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;
+                                                }
+                                            }
+                                        }
+
+                                        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;
+                                                }
+                                            }
+                                        }
+
+                                        result = f.match(/(=)?\s?(\d+)\s?(=)?/i);
+                                        if (result) {
+                                            if ((result[1] === "=") || (result[3] === "=")) {
+                                                if (parseInt(result[2]) === pct) {
+                                                    test = true;
+                                                }
+                                            }
+                                        }
+
+                                        if (!isNaN(parseFloat(f)) && isFinite(f)) {
+                                            if (parseInt(f) === pct) {
+                                                test = true;
+                                            }
+                                        }
+                                    }
+                                    return test;
+                                }
+                            },
+                            'columnSelector_mediaquery': false
+                        };
+                    } else {
+                        return {
+                            'filter_columnFilters': 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') );
+                }
+            }
+
+            $.each([$('#container'), $('#container-anime')], function (){
+                this.isotope({
+                    itemSelector: '.show',
+                    sortBy : getMeta('sickbeard.POSTER_SORTBY'),
+                    sortAscending: getMeta('sickbeard.POSTER_SORTDIR'),
+                    layoutMode: 'masonry',
+                    masonry: {
+                        columnWidth: 13,
+                        isFitWidth: true
+                    },
+                    getSortData: {
+                        name: function(itemElem){
+                            var name = $(itemElem).attr('data-name');
+                            return (metaToBool('sickbeard.SORT_ARTICLE') ? (name || '') : (name || '').replace(/^(The|A|An)\s/i,''));
+                        },
+                        network: '[data-network]',
+                        date: function(itemElem){
+                            var date = $(itemElem).attr('data-date');
+                            return date.length && parseInt(date, 10) || Number.POSITIVE_INFINITY;
+                        },
+                        progress: function(itemElem){
+                            var progress = $(itemElem).attr('data-progress');
+                            return progress.length && parseInt(progress, 10) || Number.NEGATIVE_INFINITY;
+                        }
+                    }
+                });
+            });
+
+            $('#postersort').on('change', function(){
+                $('#container, #container-anime').isotope({sortBy: $(this).val()});
+                $.get($(this).find('option[value=' + $(this).val() +']').attr('data-sort'));
+            });
+
+            $('#postersortdirection').on('change', function(){
+                $('#container, #container-anime').isotope({sortAscending: ($(this).val() === 'true')});
+                $.get($(this).find('option[value=' + $(this).val() +']').attr('data-sort'));
+            });
+
+            $('#popover').popover({
+                placement: 'bottom',
+                html: true, // required if content has HTML
+                content: '<div id="popover-target"></div>'
+            }).on('shown.bs.popover', function () { // bootstrap popover event triggered when the popover opens
+                // call this function to copy the column selection code into the popover
+                $.tablesorter.columnSelector.attachTo( $('#showListTableShows'), '#popover-target');
+                if(metaToBool('sickbeard.ANIME_SPLIT_HOME')){
+                    $.tablesorter.columnSelector.attachTo( $('#showListTableAnime'), '#popover-target');
+                }
+
+            });
+        },
+        displayShow: function() {
+            $('#srRoot').ajaxEpSearch({'colorRow': true});
+
+            $('#srRoot').ajaxEpSubtitlesSearch();
+
+            $('#seasonJump').on('change', function(){
+                var id = $('#seasonJump option:selected').val();
+                if (id && id !== 'jump') {
+                    var season = $('#seasonJump option:selected').data('season');
+                    $('html,body').animate({scrollTop: $('[name ="' + id.substring(1) + '"]').offset().top - 50}, 'slow');
+                    $('#collapseSeason-' + season).collapse('show');
+                    location.hash = id;
+                }
+                $(this).val('jump');
+            });
+
+            $("#prevShow").on('click', function(){
+                $('#pickShow option:selected').prev('option').prop('selected', 'selected');
+                $("#pickShow").change();
+            });
+
+            $("#nextShow").on('click', function(){
+                $('#pickShow option:selected').next('option').prop('selected', 'selected');
+                $("#pickShow").change();
+            });
+
+            $('#changeStatus').on('click', function(){
+                var srRoot = $('#srRoot').val();
+                var epArr = [];
+
+                $('.epCheck').each(function () {
+                    if (this.checked === true) {
+                        epArr.push($(this).attr('id'));
+                    }
+                });
+
+                if (epArr.length === 0) { return false; }
+
+                window.location.href = srRoot + '/home/setStatus?show=' + $('#showID').attr('value') + '&eps=' + epArr.join('|') + '&status=' + $('#statusSelect').val();
+            });
+
+            $('.seasonCheck').on('click', function(){
+                var seasCheck = this;
+                var seasNo = $(seasCheck).attr('id');
+
+                $('#collapseSeason-' + seasNo).collapse('show');
+                $('.epCheck:visible').each(function () {
+                    var epParts = $(this).attr('id').split('x');
+                    if (epParts[0] === seasNo) {
+                        this.checked = seasCheck.checked;
+                    }
+                });
+            });
+
+            var lastCheck = null;
+            $('.epCheck').on('click', function (event) {
+
+                if (!lastCheck || !event.shiftKey) {
+                    lastCheck = this;
+                    return;
+                }
+
+                var check = this;
+                var found = 0;
+
+                $('.epCheck').each(function() {
+                    switch (found) {
+                        case 2:
+                            return false;
+                        case 1:
+                            this.checked = lastCheck.checked;
+                    }
+
+                    if (this === check || this === lastCheck) {
+                        found++;
+                    }
+                });
+            });
+
+            // selects all visible episode checkboxes.
+            $('.seriesCheck').on('click', function () {
+                $('.epCheck:visible').each(function () {
+                    this.checked = true;
+                });
+                $('.seasonCheck:visible').each(function () {
+                    this.checked = true;
+                });
+            });
+
+            // clears all visible episode checkboxes and the season selectors
+            $('.clearAll').on('click', function () {
+                $('.epCheck:visible').each(function () {
+                    this.checked = false;
+                });
+                $('.seasonCheck:visible').each(function () {
+                    this.checked = false;
+                });
+            });
+
+            // handle the show selection dropbox
+            $('#pickShow').on('change', function () {
+                var srRoot = $('#srRoot').val();
+                var val = $(this).val();
+                if (val === 0) {
+                    return;
+                }
+                window.location.href = srRoot + '/home/displayShow?show=' + val;
+            });
+
+            // show/hide different types of rows when the checkboxes are changed
+            $("#checkboxControls input").change(function () {
+                var whichClass = $(this).attr('id');
+                $(this).showHideRows(whichClass);
+            });
+
+            // initially show/hide all the rows according to the checkboxes
+            $("#checkboxControls input").each(function() {
+                var status = $(this).prop('checked');
+                $("tr." + $(this).attr('id')).each(function() {
+                    if(status) {
+                        $(this).show();
+                    } else {
+                        $(this).hide();
+                    }
+                });
+            });
+
+            $.fn.showHideRows = function(whichClass) {
+                var status = $('#checkboxControls > input, #' + whichClass).prop('checked');
+                $("tr." + whichClass).each(function() {
+                    if (status) {
+                        $(this).show();
+                    } else {
+                        $(this).hide();
+                    }
+                });
+
+                // hide season headers with no episodes under them
+                $('tr.seasonheader').each(function () {
+                    var numRows = 0;
+                    var seasonNo = $(this).attr('id');
+                    $('tr.' + seasonNo + ' :visible').each(function () {
+                        numRows++;
+                    });
+                    if (numRows === 0) {
+                        $(this).hide();
+                        $('#' + seasonNo + '-cols').hide();
+                    } else {
+                        $(this).show();
+                        $('#' + seasonNo + '-cols').show();
+                    }
+                });
+            };
+
+            function setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode) {
+                var srRoot = $('#srRoot').val();
+                var showId = $('#showID').val();
+                var indexer = $('#indexer').val();
+
+                if (sceneSeason === '') { sceneSeason = null; }
+                if (sceneEpisode === '') { sceneEpisode = null; }
+
+                $.getJSON(srRoot + '/home/setSceneNumbering',{
+                    'show': showId,
+                    'indexer': indexer,
+                    'forSeason': forSeason,
+                    'forEpisode': forEpisode,
+                    'sceneSeason': sceneSeason,
+                    'sceneEpisode': sceneEpisode
+                }, function(data) {
+                    //	Set the values we get back
+                    if (data.sceneSeason === null || data.sceneEpisode === null) {
+                        $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val('');
+                    } else {
+                        $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val(data.sceneSeason + 'x' + data.sceneEpisode);
+                    }
+                    if (!data.success) {
+                        if (data.errorMessage) {
+                            alert(data.errorMessage);
+                        } else {
+                            alert('Update failed.');
+                        }
+                    }
+                });
+            }
+
+            function setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute) {
+                var srRoot = $('#srRoot').val();
+                var showId = $('#showID').val();
+                var indexer = $('#indexer').val();
+
+                if (sceneAbsolute === '') { sceneAbsolute = null; }
+
+                $.getJSON(srRoot + '/home/setSceneNumbering', {
+                    'show': showId,
+                    'indexer': indexer,
+                    'forAbsolute': forAbsolute,
+                    'sceneAbsolute': sceneAbsolute
+                },
+                function(data) {
+                    //	Set the values we get back
+                    if (data.sceneAbsolute === null) {
+                        $('#sceneAbsolute_' + showId + '_' + forAbsolute).val('');
+                    } else {
+                        $('#sceneAbsolute_' + showId + '_' + forAbsolute).val(data.sceneAbsolute);
+                    }
+                    if (!data.success) {
+                        if (data.errorMessage) {
+                            alert(data.errorMessage);
+                        } else {
+                            alert('Update failed.');
+                        }
+                    }
+                });
+            }
+
+            $('.sceneSeasonXEpisode').on('change', function() {
+                //	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');
+                var m = $(this).val().match(/^(\d+)x(\d+)$/i);
+                var sceneSeason = null, sceneEpisode = null;
+                if (m) {
+                    sceneSeason = m[1];
+                    sceneEpisode = m[2];
+                }
+                setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode);
+            });
+
+            $('.sceneAbsolute').on('change', function() {
+                //	Strip non-numeric characters
+                $(this).val($(this).val().replace(/[^0-9xX]*/g, ''));
+                var forAbsolute = $(this).attr('data-for-absolute');
+
+                var m = $(this).val().match(/^(\d{1,3})$/i);
+                var sceneAbsolute = null;
+                if (m) {
+                    sceneAbsolute = m[1];
+                }
+                setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute);
+            });
+
+            $('.addQTip').each(function () {
+                $(this).css({'cursor':'help', 'text-shadow':'0px 0px 0.5px #666'});
+                $(this).qtip({
+                    show: {solo:true},
+                    position: {viewport:$(window), my:'left center', adjust:{ y: -10, x: 2 }},
+                    style: {tip:{corner:true, method:'polygon'}, classes:'qtip-rounded qtip-shadow ui-tooltip-sb'}
+                });
+            });
+            $.fn.generateStars = function() {
+                return this.each(function(i,e){$(e).html($('<span/>').width($(e).text()*12));});
+            };
+
+            $('.imdbstars').generateStars();
+
+            $("#showTable, #animeTable").tablesorter({
+                widgets: ['saveSort', 'stickyHeaders', 'columnSelector'],
+                widgetOptions : {
+                    columnSelector_saveColumns: true, // jshint ignore:line
+                    columnSelector_layout : '<br><label><input type="checkbox">{name}</label>', // jshint ignore:line
+                    columnSelector_mediaquery: false, // jshint ignore:line
+                    columnSelector_cssChecked : 'checked' // jshint ignore:line
+                }
+            });
+
+            $('#popover').popover({
+                placement: 'bottom',
+                html: true, // required if content has HTML
+                content: '<div id="popover-target"></div>'
+            })
+            // bootstrap popover event triggered when the popover opens
+            .on('shown.bs.popover', function (){
+                $.tablesorter.columnSelector.attachTo($("#showTable, #animeTable"), '#popover-target');
+            });
+        },
+        postProcess: function() {
+            $('#episodeDir').fileBrowser({ title: 'Select Unprocessed Episode Folder', key: 'postprocessPath' });
+        }
+    },
     manage: {
         init: function() {
             $.makeEpisodeRow = function(indexerId, season, episode, name, checked) {
@@ -1853,6 +2325,53 @@ var SICKRAGE = {
             $('#limit').on('change', function(){
                 window.location.href = srRoot + '/manage/failedDownloads/?limit=' + $(this).val();
             });
+
+            $('#submitMassRemove').on('click', function(){
+                var removeArr = [];
+
+                $('.removeCheck').each(function() {
+                    if (this.checked === true) {
+                        removeArr.push($(this).attr('id').split('-')[1]);
+                    }
+                });
+
+                if (removeArr.length === 0) { return false; }
+
+                window.location.href = srRoot + '/manage/failedDownloads?toRemove='+removeArr.join('|');
+            });
+
+            $('.bulkCheck').on('click', function(){
+                var bulkCheck = this;
+                var whichBulkCheck = $(bulkCheck).attr('id');
+
+                $('.'+whichBulkCheck+':visible').each(function(){
+                    this.checked = bulkCheck.checked;
+                });
+            });
+
+            if($('.removeCheck').length){
+                $('.removeCheck').each(function(name) {
+                    var lastCheck = null;
+                    $(name).click(function(event) {
+                        if(!lastCheck || !event.shiftKey) {
+                            lastCheck = this;
+                            return;
+                        }
+
+                        var check = this;
+                        var found = 0;
+
+                        $(name+':visible').each(function() {
+                            switch (found) {
+                                case 2: return false;
+                                case 1: this.checked = lastCheck.checked;
+                            }
+
+                            if (this === check || this === lastCheck) { found++; }
+                        });
+                    });
+                });
+            }
         },
         massEdit: function() {
             $('#location').fileBrowser({ title: 'Select Show Location' });
@@ -1971,6 +2490,51 @@ var SICKRAGE = {
                 });
             });
         }
+    },
+    history: {
+        init: function() {
+
+        },
+        index: function() {
+            $("#historyTable:has(tbody tr)").tablesorter({
+                widgets: ['zebra', 'filter'],
+                sortList: [[0,1]],
+                textExtraction: (function(){
+                    if(isMeta('sickbeard.HISTORY_LAYOUT', ['detailed'])){
+                        return {
+                            0: function(node) { return $(node).find('time').attr('datetime'); },
+                            4: function(node) { return $(node).find("span").text().toLowerCase(); }
+                        };
+                    } else {
+                        return {
+                            0: function(node) { return $(node).find('time').attr('datetime'); },
+                            1: function(node) { return $(node).find("span").text().toLowerCase(); },
+                            2: function(node) { return $(node).attr("provider").toLowerCase(); },
+                            5: function(node) { return $(node).attr("quality").toLowerCase(); }
+                        };
+                    }
+                }()),
+                headers: (function(){
+                    if(isMeta('sickbeard.HISTORY_LAYOUT', ['detailed'])){
+                        return {
+                            0: { sorter: 'realISODate' },
+                            4: { sorter: 'quality' }
+                        };
+                    } else {
+                        return {
+                            0: { sorter: 'realISODate' },
+                            4: { sorter: false },
+                            5: { sorter: 'quality' }
+                        };
+                    }
+                }())
+            });
+
+            $('#history_limit').on('change', function() {
+                var url = srRoot + '/history/?limit=' + $(this).val();
+                window.location.href = url;
+            });
+        }
     }
 };
 
diff --git a/gui/slick/js/core.min.js b/gui/slick/js/core.min.js
index b0af1a1280876c5a80447f4db0f5d5b8cac1cb88..760b08a88b139929b632e36e4cbb084ab59dc2be 100644
GIT binary patch
delta 8593
zcmaF%ooUAj<_(f7Ei>|SQ?05q^D;}U(n|A^OEUBGG&HMgbu#l(QY(;!R5X<Iic*VH
zON#T0N;31(CmU{+F(^q)%1Kqy)GH~<OixcO(ojmv%qdAN3IeH9(yZ0g0qH6z%1<v!
zEiO(<ESfyANwGd9u_RGL2_~vrkXn?SnpcvTo~op&lVodXU|?%&n`m!nU|^MKXJKG(
z0iw+e?9D*5iGjU|ft8VgwTebbMrN_59?Y1e#3GIAvc#OyRI5a=y%1?MyGl|kO6rv~
z)zo0x6AKDb^HMa_ZBjDJ6q0iii;HdHE=x)*3Q4UfQBo+$EXhf=RZ`c6=|VR(vp`8x
zTV2Txw+fIsn%YV>`YD<5Wp+xSfPpwLEi*4gLrJeRQy0l6x?qneY3e1Wq&R~dg%n&$
z+DXuW&CE?#&Py#R&o9bW($ve((@;t+D#|aKe1J!+KCvh@uS7#r59DDDn6nd0N{Td;
z5_3wFG!YIcO3lqLOVxmysa%|qU+$AxToM9`+2D-)@?xuu#A1z-r2Ldhg_0so9R*Y+
zj(M56si;bnH1#IG*}$s-N+=+stfHgMbqr&5qK$M6Vq<kcPI9d%DM|z<Hmhob$@|yJ
zOO<5if)WzMi7AOCsStr$9Yg%m#vp0c;)29HC2(RW&`<(L7bsEY`{b9W7C9#tgS@9>
z0#Z4dW34QsDTpNm(qomDSyWsCQkz;)qA_{*TGPp$>v-ym6U$PA^NUK9bd;)6lZq0R
zbd-uqGLy3_JyH`>Qj3a}bf5`cNk=I;Kc_S|FE}+PHMu0eNGVn)1EK~w?-Zq$losVF
z<ffJ+hU7ct=jUiB6=x=AC#5D9rRceN`h>U!#RvI^D{0zS8(38r*XI|Nq!w8z6{RNT
zcn15sB$lKq)#?~pRf9qlQ^E)#k&~a8l9`w8mzbMctW>LGf{-aJP0YzGsZ^@fF+~Wb
z7JyWlSye-_t(8(iVo`BwO1)BTtrgfMbahB=t%jyfd1gv_eQJq+0jMM@CNmHr-ie1q
zjT^W~Dz;KI(1D6)WTvEIih?2?B3h5E7*;A4TUDDPoRg@Nq?4>!U6xp+kYcN7sFP~z
zn^=;emzI;CU!;+wYN%zHYOHCUnWmwnWNT}iteIk~XkeY1Q=AIcl4hH%mz!9UoS~tw
zVN+vcTVrQiW2YHYtPzu<t*M_`uW6m8rlz4}1JauoZ5V5xY6FfL&%6?iv}mJPO*J(Q
zkcpaBN;bAgifnPIvO`j3hg%iYsQOqnwNyLoW@+jmJ09fTm|_jxnv#4?xbro2z^>PY
zm}V4PQ=?Rp594U6simU0z!2n{R2yVR)f<DvAU;H~&Q{Ytrq~`FN+8-+(_TLlY8%{x
zH8o05HrNzYU)b8(rozHbM=`V5FVRl}timlPKe0q3SyNL@Ewi}Z4OAbdY9wo_sexrd
z;hwCCthpANrBiBabs)(MRszK5rlw>j7M7+KRaz+;*23}@dSWyLr*=?=4hC1ER*D8X
zAf97EL27+oid8hEv;<dWN~lFHxKvis)PqzV;F1}^D^k+bE6%J+)zGvvP*YRU0~-!9
zIJHO*lKl0OGV@Y`Qxl7lGc>T8tiuDUwTr<jlr$%A<dmp)^z-y}jSmj+@eGOg@b`6v
zRH10P!BqjmC7>Du!K27s^$?@MtqGXBG<8(;QWKLiG@?~Bl$4Y6^GXsk^HPhzRVxx-
zHxX1pDQU*)z%sIiW;Lkl)ypi-FUc=R)u_%aNzH}Do|Tdws0LI5$Awd+ReEZPZ)!<>
zB65Kp;2#Vsu!H@BLYyL%G{H(8i<49HKt(T92QCdRo<T~QIys4z`K2Yk`6;PZO1X)}
z`FTZ^N;*)6RW&3%g=eOeWLOy*>tq(Y)n}GKxQYg~I_aq;pt{K=u_V!|IxjId6{%E$
zlt@XoDjJEJdhoh5Q5U34Nz)pdXtCErApgWW28DP!`?xA;+9%c2C@EQKfT?;-y`t2D
zoW$f*4gENckc`wC#~Q~x&6r~SOdTa9%~~C3GsH?M8q_q>g>qw+bU-yZ5$*#iL%1(V
zFDErGy(9yk`|3+Hl5`9WG;3=7N^_G^i}V8ggFQn$!(8J%{oFkLJVPRDbzsdWB5Z>x
z#bYC?h3Z9mey;A0s5aKt!rDv)`NbuvMaB6=lP{{u*Ta*djshZC!jd5()q(P)Q>7KG
zZB~|;18IZlrKgs_TWpXlo)4}Jqsu_8TU#Y~D-^6nTPYUQP6W5?z+tZlGFV9y!)+xg
znMJAKCf8*9jZ*a}nTD`S5$Rj0q^L9%RGL%d^7<SNO$?`_ySyO343weu3i81$jcRZb
z%uUTJu~JIPFDc2-Rno~Q$;|<kouE($NkCfinJKnPP+htuiACwDB}#Unws)DGdM&uA
zoTmiJ=6QNa#W2&AkP8UZaubpvVMPQeUnM4Igyd_0!VqK(sF90kFDq&4C@G^^j=K;=
zDWHkA2vQzmu}HI4vsNc1v$!B9u@Y2IAaaA|<Xs6o_271kP70))NVNs~peQImAJhg0
zrzf2>h+sy3xu=VgrXEBv9V`g$6M|y|ENTsD+o-8&B-`ed=HzJVfCW;(6)Z$R1(ce-
zg8lt8Qni)zGxF<mQ}v5eOM;VA^HL#MIWsR^Nv9eVidJcmPG@S7Rk}`Eeo=5LsARNC
z1hHKUGK)c_Ws(l4oK1yFB|~^H$&^||6eep{gIoY=d+8x*sjsO)6^81y2L}YmRS=^i
zpyKgL+G*NK@k-i>U@{339!g4@RwQXihPk00<RxvT3MFl*5Y!$`on*b@(&XgS;^LYb
zjbuG=N6t63xHvIA)jlyNwWtJ5P}2$`suWrPDmxX@5;JpBQ}n?3z7|%~DI{qm>Lfwp
zIvE^;^~I=>odOmGg+5YbLy`s7$WBsI(@26wHX?45!EuW(YEz(5TVG_A3W`t1q~iRX
z(vnoGL`W3E`AJA|m;{f*BuMzdR3TyuCK9itodS-bL@Y6cq^KT66`HY{I!Q>8kc2G~
zPzCWu0yu%dLOU@lvBI?=IMp58>H^j9`9(qb<yMLYum&EQ%F-loFSZ!kP6Kt<m6VIY
zIl`+nw*XXxPrl&C1}?@C!U~X@!m1eD8%<4t<zG-oBvDOGDXTQMKuOWoHW890K<xx%
zQ?Y0VRVf-u5F3;<tyMIXKn1Q2v~8C-xpad_y?QjLd7%IrAW76KE=?*fDay=C*DwSP
ziNvaF>gA`U6{ms+Bk~J$O$};wl!|lm%i#^RoSejhVrZ7u1&wa#CFeuLG{A*4sJ)b*
zoCxX<>SZJrXV@mzB3C_1qF`Ua>${@VGEl(>8lIZ0y@4|Yi>C^TQp+@yAYla`HGqei
zjuM;+3HE}_<ZO_UN}77f8Hsu6pwR?~OkQe52}lNJSvnTWKx(LB8N}}3lEjkI$&Jz~
zifCCm$u>F`*1!X`-%|@F2X0m6wY60=P*Y3ND=00_(3tGVBP?F4sRJ5egEg}36%DP*
z@-tH=>kEt5BWGlgMaA}@vH{%YfHd~O#RQ~b32u%kX=*E}r4|(1DrqO_W#wn)X(-iz
z#frh&VLHJaNCgT@lh6p$gQP9zjMU_8rOB<^<bpwsa~)99gg0R`Qy@uC8I~|0g*1-D
z0`WZ9K&!IM;>@I+)X5W@#2J$(Uu+hh9I%PQrb0>6Iyu@P*4EY*RG@(@)Jq0AAT`A{
z5yk@5q?*>C4nCxI1Eqbv)Pl+N+hpt$HLEkzG!&C-Y7`UoiZe3PO1x7mHKDC*P+)2#
z+k#Am=uZN(by93Wqn1h_GXl3tBovotf(8ImG^>*ni&GVhtRUJI4Xwd^Lo1L0Fvr*?
z!&tT8aZixTYid9$KsB7Enp%psHmo_SSDadunOZ!#ew&;ywy+SC6P~=Lnn%_aR`?)C
z0X)Q@s)WI+Acd4(a!zVukz>x}LJcVbCL2O^AVn^^$sD$dhF~X8*4Ut@rlgFKoRKrR
zrnP~ht!>g|U13RQSQ<rY<-k%YY-Cg!9Ggk`70&s2B}Mr;#R{2u1*M=i4kQyzKG3XU
z3LioSC2^0;l+>X7@?wodXu8B<1ZV(za-|eMJ19An6zNU2=MfVCcSB*7u7+my<Y!Gv
z^`QP~S{}GJ2{YUlt_Gz5#&E11#JM^O%1YXauu)C0Do~LQwHYjhZgY}7EYv1{Xc89&
zb(l+vpz#YCmz+GYNs`$>Ckd1pMBzpyX)7rpM^JqtC_RD8i9~yNZv-@MrU5DWl(dty
zm2{KybBdKT^&sM!R&a%&5XGhtA`Z$~AeTWZbx2-@HMpPy*^}Ki3Qs=E!(j+&Xu`Y%
zVk31#qvH&8Eh{2owe-_Lolt0An=H6lgfA_>NEedylr(jcK|=K)p;SmKQb|(>)b0W0
z9!P6J6E+wZ2Oe6g0Fx@9p`}!CTSq4iOj(0kwyCx$(T1@)X|^e#aX6hsjU=69om8DP
zXtII$3D)9(`X)IeakA$|0kS-l2y%T4$n}ZPHWSE8wy0qO9ZLi`zuHj8xK<PF_!Nk%
zlfmur<Y>cKO&w5!Fa_q+#FUi4kj#R~f^yQK$;HJQ)ybuxPOOzuMruxhl8zE+pkB8)
zBQYhvT**qwprAqljP*<lDioB>%*>R)nH&;~g(aB<8jxmub#Z=9KB#4*Gx<ZOta5Ip
zl~PV>T8RQ^k|(uDNhdKStF*Yps=Crj*U&(x!pf+2^0}_qdXQmyX?c3-sd=eIi6yDQ
zC5c7Fw(uOISq&*46+reu27cgj;6|>BMv|r;sBr@7mf3&?_x0_RH1*0s!zdbtMp|Hb
zke4(xL7n4Ta0<-KO-U*SS)^32iE1-6`GQg`xNE1QpbQ>K0&_qU2B7&7P=__ONTV7w
zXq{S8Y!$6kjF>q<pD{q~+$qI^hq~b--A=G^A4n~kUlb2A${9Sl03MD;)gBKSLb6h~
zNh-3l$w^E~&9R&OV2N109e7Bn)<z#9rjB=X5?wO6xENe-rlwda!OELjP{e4!d$geT
zQa<kPcs(cv$moxQTY6OJjtAk2Fw8zVxEKNr-2@cngF0SFUFB*};~iRBxJ<q;s$dhE
zR{&9!nxX*hvnjac=cIrVbarZ`l@iDxsFHxhk_@F<&DvU>+{C=Z^wh}>Od^|&R~B=K
zfYO|DacNR+W{GcNad8l6>TR+kr-BG-(+x5uhtzyagf`#oHYrGeaxbX;mIxgrLu$W?
zP0rgWuWVnE4>mZ}R!KV%(Ix}w12qSdN^`O&*KdOqAlTbkdf?I>xjq0j7>p5ZBXGS9
zG7REUaGFulggOW`xeA&p22CqY4%{l10k7;pU2kjf&}4E>W^%R$JOd{~+EYn2HHyjD
z+f$G>6r_w#fwZSm!R@I;Z6#!fhCrKDsl+v_k}#T8Dez`h5@@OdR1MZ{Uc6D9(?TaB
zv$!O`sFK*(a%HIc$=5a**TW|aW5L74pb;ah=x75SL(B<Lc&NaOyv$<XRM3<;V$RUR
zGdRRQC^Fv1G15OYL`f%FDJ8W8JOrQ=3!X%T8<Ge%W%Bv8{J5uBVKbvLETCyW(Bvp?
zwT2*R@GPp)<o#<U6(N0rf};GgOi*Uf)GI-qbp_3}O4dVE!R8>*6@jNhAk7nOGk#=v
zA8n?z9yW(+Vg;9hIR@`kCqliVA<E1tLU%1>*j7Uc7T@tXnYo#uwkBvs9@^f#ugVMR
du20ri;9`TMqRG7*#Tl(98wiVS-nPqt5dgn9PZ9tC

delta 24
gcmdmSg8A8ZrVWxSH|L)2<=EVHO@wnZ&tn}%0G=!hQ~&?~

diff --git a/gui/slick/js/failedDownloads.js b/gui/slick/js/failedDownloads.js
deleted file mode 100644
index 15be420a1..000000000
--- a/gui/slick/js/failedDownloads.js
+++ /dev/null
@@ -1,49 +0,0 @@
-$(document).ready(function(){
-    $('#submitMassRemove').on('click', function(){
-        var removeArr = [];
-
-        $('.removeCheck').each(function() {
-            if (this.checked === true) {
-                removeArr.push($(this).attr('id').split('-')[1]);
-            }
-        });
-
-        if (removeArr.length === 0) { return false; }
-
-        window.location.href = srRoot + '/manage/failedDownloads?toRemove='+removeArr.join('|');
-    });
-
-    $('.bulkCheck').on('click', function(){
-        var bulkCheck = this;
-        var whichBulkCheck = $(bulkCheck).attr('id');
-
-        $('.'+whichBulkCheck+':visible').each(function(){
-            this.checked = bulkCheck.checked;
-        });
-    });
-
-    if($('.removeCheck').length){
-        $('.removeCheck').each(function(name) {
-            var lastCheck = null;
-            $(name).click(function(event) {
-                if(!lastCheck || !event.shiftKey) {
-                    lastCheck = this;
-                    return;
-                }
-
-                var check = this;
-                var found = 0;
-
-                $(name+':visible').each(function() {
-                    switch (found) {
-                        case 2: return false;
-                        case 1: this.checked = lastCheck.checked;
-                    }
-
-                    if (this === check || this === lastCheck) { found++; }
-                });
-            });
-        });
-    }
-
-});
diff --git a/gui/slick/js/new/displayShow.js b/gui/slick/js/new/displayShow.js
deleted file mode 100644
index dc83839e8..000000000
--- a/gui/slick/js/new/displayShow.js
+++ /dev/null
@@ -1,278 +0,0 @@
-$(document).ready(function(){
-
-    $('#srRoot').ajaxEpSearch({'colorRow': true});
-
-    $('#srRoot').ajaxEpSubtitlesSearch();
-
-    $('#seasonJump').on('change', function(){
-        var id = $('#seasonJump option:selected').val();
-        if (id && id !== 'jump') {
-            var season = $('#seasonJump option:selected').data('season');
-            $('html,body').animate({scrollTop: $('[name ="' + id.substring(1) + '"]').offset().top - 50}, 'slow');
-            $('#collapseSeason-' + season).collapse('show');
-            location.hash = id;
-        }
-        $(this).val('jump');
-    });
-
-    $("#prevShow").on('click', function(){
-        $('#pickShow option:selected').prev('option').prop('selected', 'selected');
-        $("#pickShow").change();
-    });
-
-    $("#nextShow").on('click', function(){
-        $('#pickShow option:selected').next('option').prop('selected', 'selected');
-        $("#pickShow").change();
-    });
-
-    $('#changeStatus').on('click', function(){
-        var srRoot = $('#srRoot').val();
-        var epArr = [];
-
-        $('.epCheck').each(function () {
-            if (this.checked === true) {
-                epArr.push($(this).attr('id'));
-            }
-        });
-
-        if (epArr.length === 0) { return false; }
-
-        window.location.href = srRoot + '/home/setStatus?show=' + $('#showID').attr('value') + '&eps=' + epArr.join('|') + '&status=' + $('#statusSelect').val();
-    });
-
-    $('.seasonCheck').on('click', function(){
-        var seasCheck = this;
-        var seasNo = $(seasCheck).attr('id');
-
-        $('#collapseSeason-' + seasNo).collapse('show');
-        $('.epCheck:visible').each(function () {
-            var epParts = $(this).attr('id').split('x');
-            if (epParts[0] === seasNo) {
-                this.checked = seasCheck.checked;
-            }
-        });
-    });
-
-    var lastCheck = null;
-    $('.epCheck').on('click', function (event) {
-
-        if (!lastCheck || !event.shiftKey) {
-            lastCheck = this;
-            return;
-        }
-
-        var check = this;
-        var found = 0;
-
-        $('.epCheck').each(function() {
-            switch (found) {
-                case 2:
-                    return false;
-                case 1:
-                    this.checked = lastCheck.checked;
-            }
-
-            if (this === check || this === lastCheck) {
-                found++;
-            }
-        });
-    });
-
-    // selects all visible episode checkboxes.
-    $('.seriesCheck').on('click', function () {
-        $('.epCheck:visible').each(function () {
-            this.checked = true;
-        });
-        $('.seasonCheck:visible').each(function () {
-            this.checked = true;
-        });
-    });
-
-    // clears all visible episode checkboxes and the season selectors
-    $('.clearAll').on('click', function () {
-        $('.epCheck:visible').each(function () {
-            this.checked = false;
-        });
-        $('.seasonCheck:visible').each(function () {
-            this.checked = false;
-        });
-    });
-
-    // handle the show selection dropbox
-    $('#pickShow').on('change', function () {
-        var srRoot = $('#srRoot').val();
-        var val = $(this).val();
-        if (val === 0) {
-            return;
-        }
-        window.location.href = srRoot + '/home/displayShow?show=' + val;
-    });
-
-    // show/hide different types of rows when the checkboxes are changed
-    $("#checkboxControls input").change(function () {
-        var whichClass = $(this).attr('id');
-        $(this).showHideRows(whichClass);
-    });
-
-    // initially show/hide all the rows according to the checkboxes
-    $("#checkboxControls input").each(function() {
-        var status = $(this).prop('checked');
-        $("tr." + $(this).attr('id')).each(function() {
-            if(status) {
-                $(this).show();
-            } else {
-                $(this).hide();
-            }
-        });
-    });
-
-    $.fn.showHideRows = function(whichClass) {
-        var status = $('#checkboxControls > input, #' + whichClass).prop('checked');
-        $("tr." + whichClass).each(function() {
-            if (status) {
-                $(this).show();
-            } else {
-                $(this).hide();
-            }
-        });
-
-        // hide season headers with no episodes under them
-        $('tr.seasonheader').each(function () {
-            var numRows = 0;
-            var seasonNo = $(this).attr('id');
-            $('tr.' + seasonNo + ' :visible').each(function () {
-                numRows++;
-            });
-            if (numRows === 0) {
-                $(this).hide();
-                $('#' + seasonNo + '-cols').hide();
-            } else {
-                $(this).show();
-                $('#' + seasonNo + '-cols').show();
-            }
-        });
-    };
-
-    function setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode) {
-        var srRoot = $('#srRoot').val();
-        var showId = $('#showID').val();
-        var indexer = $('#indexer').val();
-
-        if (sceneSeason === '') { sceneSeason = null; }
-        if (sceneEpisode === '') { sceneEpisode = null; }
-
-        $.getJSON(srRoot + '/home/setSceneNumbering',{
-            'show': showId,
-            'indexer': indexer,
-            'forSeason': forSeason,
-            'forEpisode': forEpisode,
-            'sceneSeason': sceneSeason,
-            'sceneEpisode': sceneEpisode
-        }, function(data) {
-            //	Set the values we get back
-            if (data.sceneSeason === null || data.sceneEpisode === null) {
-                $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val('');
-            } else {
-                $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val(data.sceneSeason + 'x' + data.sceneEpisode);
-            }
-            if (!data.success) {
-                if (data.errorMessage) {
-                    alert(data.errorMessage);
-                } else {
-                    alert('Update failed.');
-                }
-            }
-        });
-    }
-
-    function setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute) {
-        var srRoot = $('#srRoot').val();
-        var showId = $('#showID').val();
-        var indexer = $('#indexer').val();
-
-        if (sceneAbsolute === '') { sceneAbsolute = null; }
-
-        $.getJSON(srRoot + '/home/setSceneNumbering', {
-            'show': showId,
-            'indexer': indexer,
-            'forAbsolute': forAbsolute,
-            'sceneAbsolute': sceneAbsolute
-        },
-        function(data) {
-            //	Set the values we get back
-            if (data.sceneAbsolute === null) {
-                $('#sceneAbsolute_' + showId + '_' + forAbsolute).val('');
-            } else {
-                $('#sceneAbsolute_' + showId + '_' + forAbsolute).val(data.sceneAbsolute);
-            }
-            if (!data.success) {
-                if (data.errorMessage) {
-                    alert(data.errorMessage);
-                } else {
-                    alert('Update failed.');
-                }
-            }
-        });
-    }
-
-    $('.sceneSeasonXEpisode').on('change', function() {
-        //	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');
-        var m = $(this).val().match(/^(\d+)x(\d+)$/i);
-        var sceneSeason = null, sceneEpisode = null;
-        if (m) {
-            sceneSeason = m[1];
-            sceneEpisode = m[2];
-        }
-        setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode);
-    });
-
-    $('.sceneAbsolute').on('change', function() {
-        //	Strip non-numeric characters
-        $(this).val($(this).val().replace(/[^0-9xX]*/g, ''));
-        var forAbsolute = $(this).attr('data-for-absolute');
-
-        var m = $(this).val().match(/^(\d{1,3})$/i);
-        var sceneAbsolute = null;
-        if (m) {
-            sceneAbsolute = m[1];
-        }
-        setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute);
-    });
-
-    $('.addQTip').each(function () {
-        $(this).css({'cursor':'help', 'text-shadow':'0px 0px 0.5px #666'});
-        $(this).qtip({
-            show: {solo:true},
-            position: {viewport:$(window), my:'left center', adjust:{ y: -10, x: 2 }},
-            style: {tip:{corner:true, method:'polygon'}, classes:'qtip-rounded qtip-shadow ui-tooltip-sb'}
-        });
-    });
-    $.fn.generateStars = function() {
-        return this.each(function(i,e){$(e).html($('<span/>').width($(e).text()*12));});
-    };
-
-    $('.imdbstars').generateStars();
-
-    $("#showTable, #animeTable").tablesorter({
-        widgets: ['saveSort', 'stickyHeaders', 'columnSelector'],
-        widgetOptions : {
-            columnSelector_saveColumns: true, // jshint ignore:line
-            columnSelector_layout : '<br><label><input type="checkbox">{name}</label>', // jshint ignore:line
-            columnSelector_mediaquery: false, // jshint ignore:line
-            columnSelector_cssChecked : 'checked' // jshint ignore:line
-        }
-    });
-
-    $('#popover').popover({
-        placement: 'bottom',
-        html: true, // required if content has HTML
-        content: '<div id="popover-target"></div>'
-    })
-    // bootstrap popover event triggered when the popover opens
-    .on('shown.bs.popover', function (){
-        $.tablesorter.columnSelector.attachTo($("#showTable, #animeTable"), '#popover-target');
-    });
-});
diff --git a/gui/slick/js/new/history.js b/gui/slick/js/new/history.js
deleted file mode 100644
index d4a666bcf..000000000
--- a/gui/slick/js/new/history.js
+++ /dev/null
@@ -1,40 +0,0 @@
-$(document).ready(function(){
-    $("#historyTable:has(tbody tr)").tablesorter({
-        widgets: ['zebra', 'filter'],
-        sortList: [[0,1]],
-        textExtraction: (function(){
-            if(isMeta('sickbeard.HISTORY_LAYOUT', ['detailed'])){
-                return {
-                    0: function(node) { return $(node).find('time').attr('datetime'); },
-                    4: function(node) { return $(node).find("span").text().toLowerCase(); }
-                };
-            } else {
-                return {
-                    0: function(node) { return $(node).find('time').attr('datetime'); },
-                    1: function(node) { return $(node).find("span").text().toLowerCase(); },
-                    2: function(node) { return $(node).attr("provider").toLowerCase(); },
-                    5: function(node) { return $(node).attr("quality").toLowerCase(); }
-                };
-            }
-        }()),
-        headers: (function(){
-            if(isMeta('sickbeard.HISTORY_LAYOUT', ['detailed'])){
-                return {
-                    0: { sorter: 'realISODate' },
-                    4: { sorter: 'quality' }
-                };
-            } else {
-                return {
-                    0: { sorter: 'realISODate' },
-                    4: { sorter: false },
-                    5: { sorter: 'quality' }
-                };
-            }
-        }())
-    });
-
-    $('#history_limit').on('change', function() {
-        var url = srRoot + '/history/?limit=' + $(this).val();
-        window.location.href = url;
-    });
-});
diff --git a/gui/slick/js/new/home.js b/gui/slick/js/new/home.js
deleted file mode 100644
index 1df0a5edb..000000000
--- a/gui/slick/js/new/home.js
+++ /dev/null
@@ -1,195 +0,0 @@
-$(document).ready(function(){
-    // Resets the tables sorting, needed as we only use a single call for both tables in tablesorter
-    $('.resetsorting').on('click', function(){
-        $('table').trigger('filterReset');
-    });
-
-    // This needs to be refined to work a little faster.
-    $('.progressbar').each(function(progressbar){
-        var showId = $(this).data('show-id');
-        var percentage = $(this).data('progress-percentage');
-        var classToAdd = percentage === 100 ? 100 : percentage > 80 ? 80 : percentage > 60 ? 60 : percentage > 40 ? 40 : 20;
-        $(this).progressbar({ value:  percentage });
-        if($(this).data('progress-text')) {
-            $(this).append('<div class="progressbarText" title="' + $(this).data('progress-tip') + '">' + $(this).data('progress-text') + '</div>');
-        }
-        $(this).find('.ui-progressbar-value').addClass('progress-' + classToAdd);
-    });
-
-    $("img#network").on('error', function(){
-        $(this).parent().text($(this).attr('alt'));
-        $(this).remove();
-    });
-
-    $("#showListTableShows:has(tbody tr), #showListTableAnime:has(tbody tr)").tablesorter({
-        sortList: [[7,1],[2,0]],
-        textExtraction: {
-            0: function(node) { return $(node).find('time').attr('datetime'); },
-            1: function(node) { return $(node).find('time').attr('datetime'); },
-            3: function(node) { return $(node).find("span").prop("title").toLowerCase(); },
-            4: function(node) { return $(node).find("span").text().toLowerCase(); },
-            5: function(node) { return $(node).find("span:first").text(); },
-            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, i, r, c) {
-                            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;
-                                        }
-                                    }
-                                }
-
-                                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;
-                                        }
-                                    }
-                                }
-
-                                result = f.match(/(=)?\s?(\d+)\s?(=)?/i);
-                                if (result) {
-                                    if ((result[1] === "=") || (result[3] === "=")) {
-                                        if (parseInt(result[2]) === pct) {
-                                            test = true;
-                                        }
-                                    }
-                                }
-
-                                if (!isNaN(parseFloat(f)) && isFinite(f)) {
-                                    if (parseInt(f) === pct) {
-                                        test = true;
-                                    }
-                                }
-                            }
-                            return test;
-                        }
-                    },
-                    columnSelector_mediaquery: false
-                };
-            } else {
-                return {
-                    filter_columnFilters: 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') );
-        }
-    }
-
-    var $container = [$('#container'), $('#container-anime')];
-
-    $.each($container, function (j){
-        this.isotope({
-            itemSelector: '.show',
-            sortBy : getMeta('sickbeard.POSTER_SORTBY'),
-            sortAscending: getMeta('sickbeard.POSTER_SORTDIR'),
-            layoutMode: 'masonry',
-            masonry: {
-                columnWidth: 13,
-                isFitWidth: true
-            },
-            getSortData: {
-                name: function(itemElem){
-                    var name = $(itemElem).attr('data-name');
-                    return (metaToBool('sickbeard.SORT_ARTICLE') ? (name || '') : (name || '').replace(/^(The|A|An)\s/i,''));
-                },
-                network: '[data-network]',
-                date: function(itemElem){
-                    var date = $(itemElem).attr('data-date');
-                    return date.length && parseInt(date, 10) || Number.POSITIVE_INFINITY;
-                },
-                progress: function(itemElem){
-                    var progress = $(itemElem).attr('data-progress');
-                    return progress.length && parseInt(progress, 10) || Number.NEGATIVE_INFINITY;
-                }
-            }
-        });
-    });
-
-    $('#postersort').on('change', function(){
-        var sortValue = this.value;
-        $('#container').isotope({sortBy: sortValue});
-        $('#container-anime').isotope({sortBy: sortValue});
-        $.get(this.options[this.selectedIndex].getAttribute('data-sort'));
-    });
-
-    $('#postersortdirection').on('change', function(){
-        var sortDirection = this.value;
-        sortDirection = sortDirection == 'true';
-        $('#container').isotope({sortAscending: sortDirection});
-        $('#container-anime').isotope({sortAscending: sortDirection});
-        $.get(this.options[this.selectedIndex].getAttribute('data-sort'));
-    });
-
-    $('#popover').popover({
-        placement: 'bottom',
-        html: true, // required if content has HTML
-        content: '<div id="popover-target"></div>'
-    }).on('shown.bs.popover', function () { // bootstrap popover event triggered when the popover opens
-        // call this function to copy the column selection code into the popover
-        $.tablesorter.columnSelector.attachTo( $('#showListTableShows'), '#popover-target');
-        if(metaToBool('sickbeard.ANIME_SPLIT_HOME')){
-            $.tablesorter.columnSelector.attachTo( $('#showListTableAnime'), '#popover-target');
-        }
-
-    });
-});
diff --git a/gui/slick/js/new/home_postprocess.js b/gui/slick/js/new/home_postprocess.js
deleted file mode 100644
index 1449181d9..000000000
--- a/gui/slick/js/new/home_postprocess.js
+++ /dev/null
@@ -1 +0,0 @@
-$('#episodeDir').fileBrowser({ title: 'Select Unprocessed Episode Folder', key: 'postprocessPath' });
diff --git a/gui/slick/js/new/manage.js b/gui/slick/js/new/manage.js
deleted file mode 100644
index b8ac98a50..000000000
--- a/gui/slick/js/new/manage.js
+++ /dev/null
@@ -1,2 +0,0 @@
-$(document).ready(function(){
-    });
diff --git a/gui/slick/js/new/manage_backlogOverview.js b/gui/slick/js/new/manage_backlogOverview.js
deleted file mode 100644
index 38637c688..000000000
--- a/gui/slick/js/new/manage_backlogOverview.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$(document).ready(function(){
-    
-});
diff --git a/gui/slick/js/new/manage_failedDownloads.js b/gui/slick/js/new/manage_failedDownloads.js
deleted file mode 100644
index 38637c688..000000000
--- a/gui/slick/js/new/manage_failedDownloads.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$(document).ready(function(){
-    
-});
diff --git a/gui/slick/js/new/manage_massEdit.js b/gui/slick/js/new/manage_massEdit.js
deleted file mode 100644
index e69de29bb..000000000
diff --git a/gui/slick/views/displayShow.mako b/gui/slick/views/displayShow.mako
index 44f17cb44..b8da99c0f 100644
--- a/gui/slick/views/displayShow.mako
+++ b/gui/slick/views/displayShow.mako
@@ -13,7 +13,6 @@
 %>
 <%block name="scripts">
 <script type="text/javascript" src="${srRoot}/js/lib/jquery.bookmarkscroll.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/new/displayShow.js"></script>
 <script type="text/javascript" src="${srRoot}/js/plotTooltip.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/sceneExceptionsTooltip.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/ratingTooltip.js?${sbPID}"></script>
diff --git a/gui/slick/views/home.mako b/gui/slick/views/home.mako
index b386eaa95..9b02a63f3 100644
--- a/gui/slick/views/home.mako
+++ b/gui/slick/views/home.mako
@@ -9,9 +9,6 @@
 <%block name="metas">
 <meta data-var="max_download_count" data-content="${max_download_count}">
 </%block>
-<%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/new/home.js?${sbPID}"></script>
-</%block>
 <%block name="content">
 <%namespace file="/inc_defs.mako" import="renderQualityPill"/>
 % if not header is UNDEFINED:
diff --git a/gui/slick/views/manage_failedDownloads.mako b/gui/slick/views/manage_failedDownloads.mako
index 4c56c324b..bac45ec04 100644
--- a/gui/slick/views/manage_failedDownloads.mako
+++ b/gui/slick/views/manage_failedDownloads.mako
@@ -9,10 +9,6 @@
     from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, SNATCHED, SNATCHED_PROPER, SNATCHED_BEST, FAILED
     from sickbeard.common import Quality, qualityPresets, qualityPresetStrings, statusStrings, Overview
 %>
-<%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/new/manage_failedDownloads.js"></script>
-<script type="text/javascript" src="${srRoot}/js/failedDownloads.js?${sbPID}"></script>
-</%block>
 <%block name="content">
 % if not header is UNDEFINED:
     <h1 class="header">${header}</h1>
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index b53917465..6c597a244 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -2177,7 +2177,7 @@ class HomePostProcess(Home):
 
     def index(self):
         t = PageTemplate(rh=self, filename="home_postprocess.mako")
-        return t.render(title='Post Processing', header='Post Processing', topmenu='home', controller="postprocess", action="index")
+        return t.render(title='Post Processing', header='Post Processing', topmenu='home', controller="home", action="postProcess")
 
     def processEpisode(self, proc_dir=None, nzbName=None, jobName=None, quiet=None, process_method=None, force=None,
                        is_priority=None, delete_on="0", failed="0", proc_type="auto", *args, **kwargs):
@@ -2400,7 +2400,7 @@ class HomeAddShows(Home):
         posts them to addNewShow
         """
         t = PageTemplate(rh=self, filename="home_recommendedShows.mako")
-        return t.render(title="Recommended Shows", header="Recommended Shows", enable_anime_options=False, controller="home", action="addShows|recommendedShows")
+        return t.render(title="Recommended Shows", header="Recommended Shows", enable_anime_options=False)
 
     def getRecommendedShows(self):
         t = PageTemplate(rh=self, filename="trendingShows.mako")
@@ -3431,7 +3431,8 @@ class Manage(Home, WebRoot):
 
         t = PageTemplate(rh=self, filename="manage_failedDownloads.mako")
 
-        return t.render(limit=limit, failedResults=sqlResults, title='Failed Downloads', header='Failed Downloads', topmenu='manage')
+        return t.render(limit=limit, failedResults=sqlResults, title='Failed Downloads', header='Failed Downloads', topmenu='manage',
+                controller="manage", action="failedDownloads")
 
 
 @route('/manage/manageSearches(/?.*)')
@@ -3446,7 +3447,8 @@ class ManageSearches(Manage):
         return t.render(backlogPaused=sickbeard.searchQueueScheduler.action.is_backlog_paused(),
                         backlogRunning=sickbeard.searchQueueScheduler.action.is_backlog_in_progress(), dailySearchStatus=sickbeard.dailySearchScheduler.action.amActive,
                         findPropersStatus=sickbeard.properFinderScheduler.action.amActive, queueLength=sickbeard.searchQueueScheduler.action.queue_length(),
-                        title='Manage Searches', header='Manage Searches', topmenu='manage')
+                        title='Manage Searches', header='Manage Searches', topmenu='manage',
+                        controller="manage", action="manageSearches")
 
     def forceBacklog(self):
         # force it to run the next time it looks
@@ -3548,7 +3550,8 @@ class History(WebRoot):
             {'title': 'Trim History', 'path': 'history/trimHistory', 'icon': 'ui-icon ui-icon-trash', 'class': 'trimhistory', 'confirm': True},
         ]
 
-        return t.render(historyResults=data, compactResults=compact, limit=limit, submenu=submenu, title='History', header='History', topmenu="history")
+        return t.render(historyResults=data, compactResults=compact, limit=limit, submenu=submenu, title='History', header='History', topmenu="history",
+                controller="history", action="index")
 
     def clearHistory(self):
         self.history.clear()
-- 
GitLab