component-archive.js

/**
 * Component Archive
 * @module Archive
 * @param  {jQuery} $ Instance of jQuery
 * @return {Object} List of archive methods
 */
XA.component.archive = (function($) {
    /**
     * This object stores all public api methods
     * @type {Object.<Methods>}
     * @memberOf module:Archive
     * */
    var api = {};
    /**
     * toggleClick method toggle childs visibility
     * for archive items
     * @memberOf module:Archive
     * @param {eventObject} args
     * @private
     */
    var toggleClick = function(args) {
        var groupHeader = $(args.target);
        groupHeader.siblings("ul").toggle();
        groupHeader.toggleClass("opened");
    };
    /**
     * initInstance method bindc toggling for
     * an archive element
     * @memberOf module:Archive
     * @method
     * @param {jQuery} component Root DOM element of archive component wrapped by jQuery
     * @alias module:Archive.initInstance
     */
    api.initInstance = function(component) {
        var toggles = component.find(".group-header");
        toggles.on("click", toggleClick);
    };

    /**
     * init method calls in a loop for each
     * archive component on a page and runs Archive's
     * ["initInstance"]{@link module:Archive.api.initInstance}  method.
     * @memberOf module:Archive
     * @alias module:Archive.init
     */
    api.init = function() {
        var archives = $(".sxa-archive:not(.initialized)"),
            archive;

        for (var i = 0, l = archives.length; i < l; i++) {
            archive = $(archives[i]);
            api.initInstance(archive);
            archive.addClass("initialized");
        }
    };

    return api;
})(jQuery, _);

XA.register("archive", XA.component.archive);