Amazon Category Expander

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

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Greasemonkey lub Violentmonkey.

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Violentmonkey.

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Violentmonkey.

Aby zainstalować ten skrypt, wymagana będzie instalacja rozszerzenia Tampermonkey lub Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

Aby zainstalować ten skrypt, musisz zainstalować rozszerzenie menedżera skryptów użytkownika.

(Mam już menedżera skryptów użytkownika, pozwól mi to zainstalować!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Musisz zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

(Mam już menedżera stylów użytkownika, pozwól mi to zainstalować!)

// ==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();
});