API Docs for: 1.0.0
Show:

File: Resources/public/js/extensions/ez-accordion-element.js

/*
 * Copyright (C) eZ Systems AS. All rights reserved.
 * For full copyright and license information view LICENSE file distributed with this source code.
 */
YUI.add('ez-accordion-element', function (Y) {
    "use strict";
    /**
     * The accordion extension
     *
     * @module ez-accordion-element
     */

    Y.namespace('eZ');

    /**
     * Extension providing the `_collapse` method which allows to create an
     * accordion effect on elements with a nice transition on its height.
     *
     * @namespace eZ
     * @class AccordionElement
     * @extensionfor Y.View
     */
    var AccordionElement = function () {};

    /**
     * Collapse or uncollapse an element (transition on its height);
     *
     * @method _collapse
     * @protected
     * @param {Object} conf the configuration
     * @param {String} conf.collapsedClass the class to set/unset on the detectElement
     *                 node
     * @param {Node|HTMLElement|String} conf.collapseElement the DOM element
     *                                  which is collapsed/uncollapsed
     * @param {Node|HTMLElement|String} [conf.detectElement] the DOM element used
     *                                  to detect the current state, if not
     *                                  provided the `collapseElement` is used
     *                                  instead.
     * @param {String} [conf.collapsedHeight=0] the height of the collapseElement
     *                 when it is collapsed
     * @param {Number} [conf.duration=0.3] the transition duration
     * @param {String} [conf.easing=ease] the transition easing
     * @param {Function} [conf.callback] optional callback function called after the
     *                   element has collapsed/uncollapsed
     */
    AccordionElement.prototype._collapse = function (conf) {
        var collapseElement = Y.one(conf.collapseElement),
            detectElement = Y.one(conf.detectElement ? conf.detectElement : conf.collapseElement),
            collapsed = detectElement.hasClass(conf.collapsedClass);

        collapseElement.setStyle('overflow', 'hidden');
        collapseElement.transition({
            height: function () {
                if ( collapsed ) {
                    return collapseElement.get('scrollHeight') + 'px';
                } else {
                    return conf.collapsedHeight ? conf.collapsedHeight : 0;
                }
            },
            duration: conf.duration ? conf.duration : 0.3,
            easing: conf.easing ? conf.easing : 'ease'
        }, function () {
            if ( collapsed ) {
                collapseElement.removeAttribute('style');
            }
            detectElement.toggleClass(conf.collapsedClass);
            if ( conf.callback ) {
                conf.callback.call(this);
            }
        });
    };

    Y.eZ.AccordionElement = AccordionElement;
});