Amazon Category Expander

The Category Expander expands all categories on the daily offers page of Amazon

// ==UserScript==
// @name         Amazon Category Expander
// @namespace    https://lewisch.io/
// @version      1.0
// @description  The Category Expander expands all categories on the daily offers page of Amazon
// @author       Thomas Lewisch
// @match        *.amazon.de/gp/angebote*
// @require      https://code.jquery.com/jquery-2.2.0.min.js
// @grant        none
// ==/UserScript==
/* jshint -W097 */
'use strict';

var CategoryExpander = function(options) {
    this.options = options || {};

    this.defaults = {
        selectors: {                               // the selectors used to find the categories
            expander: '.a-expander-header span',   // the selector for the category expander
            categoryContainer: '#widgetFilters',   // the selector for the category container
        },
    };

    this.settings = jQuery.extend({}, this.defaults, options);
};

/**
 * starts the category selector
 *
 * @return {void}
 */
CategoryExpander.prototype.run = function () {
    var self = this,
        exists = window.setInterval(function() {
            if (self.filters().length) {
                self.expandCategories();
                window.clearInterval(exists);
            }
        }, 100);
};

/**
 * gets the container element that holds the filters
 *
 * @return {jQuery element|array}
 */
CategoryExpander.prototype.filters = function () {
    return jQuery(document).find(this.settings.selectors.categoryContainer);
};

/**
 * expands the categories to display all categories
 *
 * @return {void}
 */
CategoryExpander.prototype.expandCategories = function () {
    this.filters().find(this.settings.selectors.expander).trigger('click');
};

/**
 * initializes a new category expander
 *
 * @param  {object} options
 * @return {CategoryExpander}
 */
CategoryExpander.init = function(options) {
    var expander = new CategoryExpander(options);

    expander.run();

    return expander;
};

jQuery(document).ready(function($) {
    CategoryExpander.init();
});