History and Bookmarks Filter

Don't display any fics on the page that don't fit in the inputted filters

// ==UserScript==
// @name         History and Bookmarks Filter
// @namespace    Bairdel AO3 History and Bookmarks Filter
// @version      0.3
// @description  Don't display any fics on the page that don't fit in the inputted filters
// @author       Bairdel
// @match        *archiveofourown.org/users/*/bookmarks*
// @match        *archiveofourown.org/users/*/readings*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=archiveofourown.org
// @grant        none
// @license     GNU GPLv3
// ==/UserScript==

//////////////////////////
// User Filters ///////////// USERS SHOULD ONLY LOOK AT THIS BIT BELOW ///////////

// Top sets an upper limit on the filter e.g. kudos < 500
// Exact shows fics with that exact value e.g. kudos = 500
// Bottom sets a lower limit on the filter e.g. kudos > 500


var wordCheckTop = false;
var wordCheckExact = false;
var wordCheckBottom = false;

var chapterCheckTop = false;
var chapterCheckExact = false;
var chapterCheckBottom = false;

var completeCheck = false;
var WIPCheck = false;

var kudosCheckTop = false;
var kudosCheckExact = false;
var kudosCheckBottom = false;

var bookmarkCheckTop = false;
var bookmarkCheckExact = false;
var bookmarkCheckBottom = false;

var hitCheckTop = false;
var hitCheckExact = false;
var hitCheckBottom = false;

var commentCheckTop = false;
var commentCheckExact = false;
var commentCheckBottom = false;


//////////////////////////////////////// DON'T WORRY ABOUT THIS STUFF /////////////////////////////////////////////////////////////////////////




(function() {
    'use strict';

    // determines if page is a history page or bookmarks page
    var title = document.getElementsByTagName("h2")[0].innerHTML.trim();
    var works;
    if (title == "History") {
        // history page
        works = document.getElementsByClassName("reading work blurb group");

    } else {
        // bookmarks page
        works = document.getElementsByClassName("bookmark blurb group");

    }

    // iterate through all works on page
    for (let i=0; i < works.length; i++) {
        var currentWork = works[i];

        // gets all stats
        var words
        var chapters
        var comments;
        var kudos;
        var bookmarks;
        var hits
        var complete;



        // sometimes fics don't have kudos, comments, or bookmarks so set to 0
        try {
            comments = Number(currentWork.getElementsByClassName("comments")[1].textContent);
        } catch(e) {
            comments = 0;
        }

        try {
            kudos = Number(currentWork.getElementsByClassName("kudos")[1].textContent);
        } catch(e) {
            kudos = 0;
        }

        try {
            bookmarks = Number(currentWork.getElementsByClassName("bookmarks")[1].textContent);
        } catch(e) {
            try {
                bookmarks =Number(currentWork.getElementsByClassName("stats")[0].getElementsByTagName("dd")[2].textContent.replace(",","").replace(".",""));
            } catch(w) {
                bookmarks = 0
            }
        }


        // sometimes there are series in bookmarks
        try {
            chapters = currentWork.getElementsByClassName("chapters")[1].textContent;
            // checks if complete
            if (chapters.split("/")[0] == chapters.split("/")[1]) { // complete if chapters = final chapter count
                complete = true;
            } else {
                complete = false;
            }

            chapters = Number(chapters.split("/")[0]); // allow filtering by chapters
        } catch(e) {
            try {
                chapters = Number(currentWork.getElementsByClassName("stats")[0].getElementsByTagName("dd")[1].textContent);
            } catch(w) {
                chapters = 1;
            }
        }

        try {
            hits = Number(currentWork.getElementsByClassName("hits")[1].innerHTML);
        } catch(e) {
            hits = bookmarks;
        }

        try {
            words = Number(currentWork.getElementsByClassName("words")[1].innerHTML.replace(",","").replace(".",""));
        } catch(e) {
            try {
                words = Number(currentWork.getElementsByClassName("stats")[0].getElementsByTagName("dd")[0].textContent.replace(",","").replace(".",""));
            } catch(w) {
                words = 0
            }
        }


        ////////////////////////////////////////////////
        // remove fic from view if outside of range stated

        ////////// words /////////////

        if (wordCheckTop != false) {
            if (words > wordCheckTop) {
                currentWork.style.display = 'none';
            }
        }
        if (wordCheckExact != false) {
            if (words != wordCheckExact) {
                currentWork.style.display = 'none';
            }

        }
        if (wordCheckBottom != false) {
            if (words < wordCheckBottom) {
                currentWork.style.display = 'none';
            }

            ////////// chapters /////////////

        }
        if (chapterCheckTop != false) {
            if (chapters > chapterCheckTop) {
                currentWork.style.display = 'none';
            }
        }
        if (chapterCheckExact != false) {
            if (chapters != chapterCheckExact) {
                currentWork.style.display = 'none';
            }
        }
        if (chapterCheckBottom != false) {
            if (chapters < chapterCheckBottom) {
                currentWork.style.display = 'none';
            }
        }

        ////////// complete /////////////

        if (completeCheck != false) {
            if (complete == false) {
                currentWork.style.display = 'none';
            }
        }
        if (WIPCheck != false) {
            if (complete == true) {
                currentWork.style.display = 'none';
            }
        }

        ////////// kudos /////////////

        if (kudosCheckTop != false) {
            if (kudos > kudosCheckTop) {
                currentWork.style.display = 'none';
            }
        }
        if (kudosCheckExact != false) {
            if (kudos != kudosCheckExact) {
                currentWork.style.display = 'none';
            }
        }
        if (kudosCheckBottom != false) {
            if (kudos < kudosCheckBottom) {
                currentWork.style.display = 'none';
            }
        }

        ////////// bookmarks /////////////

        if (bookmarkCheckTop != false) {
            if (bookmarks > bookmarkCheckTop) {
                currentWork.style.display = 'none';
            }
        }
        if (bookmarkCheckExact != false) {
            if (bookmarks != bookmarkCheckExact) {
                currentWork.style.display = 'none';
            }
        }
        if (bookmarkCheckBottom != false) {
            if (bookmarks < bookmarkCheckBottom) {
                currentWork.style.display = 'none';
            }
        }

        ////////// hits /////////////

        if (hitCheckTop != false) {
            if (hits > hitCheckTop) {
                currentWork.style.display = 'none';
            }
        }
        if (hitCheckExact != false) {
            if (hits != hitCheckExact) {
                currentWork.style.display = 'none';
            }
        }
        if (hitCheckBottom != false) {
            if (hits < hitCheckBottom) {
                currentWork.style.display = 'none';
            }
        }

        ////////// comments /////////////

        if (commentCheckTop != false) {
            if (comments > commentCheckTop) {
                currentWork.style.display = 'none';
            }
        }
        if (commentCheckExact != false) {
            if (comments != commentCheckExact) {
                currentWork.style.display = 'none';
            }
        }
        if (commentCheckBottom != false) {
            if (comments < commentCheckBottom) {
                currentWork.style.display = 'none';
            }
        }

    }

})();