Skip to content
Code-Schnipsel Gruppen Projekte
Category.js 2,72 KiB
Newer Older
Henning Leutz's avatar
Henning Leutz committed
/**
 * Category handling
 * Set events and scroll effects
 *
 * @module package/quiqqer/faq/bin/Category
 * @author www.pcsg.de (Henning Leutz)
 *
 * @require qui/QUI
 * @require qui/controls/Control
 */
Henning Leutz's avatar
Henning Leutz committed
define('package/quiqqer/faq/bin/Category', [
Henning Leutz's avatar
Henning Leutz committed

    'qui/QUI',
    'qui/controls/Control'

Henning Leutz's avatar
Henning Leutz committed
], function (QUI, QUIControl) {
Henning Leutz's avatar
Henning Leutz committed
    "use strict";

    return new Class({

Henning Leutz's avatar
Henning Leutz committed
        Extends: QUIControl,
        Type   : 'package/quiqqer/faq/bin/Category',
Henning Leutz's avatar
Henning Leutz committed
        Binds: [
Henning Leutz's avatar
Henning Leutz committed
            '$onImport',
            'scrollToTop',
            '$scrollToClick'
        ],

Henning Leutz's avatar
Henning Leutz committed
        initialize: function (options) {
            this.parent(options);
Henning Leutz's avatar
Henning Leutz committed

            this.addEvents({
                onImport: this.$onImport
            });
        },

        /**
         * event : on import
         */
Henning Leutz's avatar
Henning Leutz committed
        $onImport: function () {
            var links   = this.getElm().getElements('.quiqqer-faq-list li a'),
                topList = this.getElm().getElements('[href="#top"]');
Henning Leutz's avatar
Henning Leutz committed
            for (var i = 0, len = links.length; i < len; i++) {
                links[i].addEvent('click', this.$scrollToClick);
Henning Leutz's avatar
Henning Leutz committed
            topList.addEvent('click', this.scrollToTop);
Henning Leutz's avatar
Henning Leutz committed

            // check location
Henning Leutz's avatar
Henning Leutz committed
            if (!window.location.hash || window.location.hash === '') {
Henning Leutz's avatar
Henning Leutz committed
            var Article = this.getElm().getElement(window.location.hash);
Henning Leutz's avatar
Henning Leutz committed
            if (Article) {
                new Fx.Scroll(window).toElement(Article);
Henning Leutz's avatar
Henning Leutz committed
            }
        },

        /**
         * event : on click at a faq entry
         *
         * @param {DOMEvent} event - click event
         */
Henning Leutz's avatar
Henning Leutz committed
        $scrollToClick: function (event) {
            if (typeOf(event) === 'domevent') {
Henning Leutz's avatar
Henning Leutz committed
                event.stop();
            }

            var Target = event.target,
Henning Leutz's avatar
Henning Leutz committed
                href   = Target.get('href');
Henning Leutz's avatar
Henning Leutz committed
            href = href.split('#');
Henning Leutz's avatar
Henning Leutz committed
            if (typeof href[1] === 'undefined') {
Henning Leutz's avatar
Henning Leutz committed
            var Article = this.getElm().getElement('#' + href[1]);
Henning Leutz's avatar
Henning Leutz committed
            if (!Article) {
Henning Leutz's avatar
Henning Leutz committed
                return;
            }

            new Fx.Scroll(window, {
Henning Leutz's avatar
Henning Leutz committed
                onComplete: function () {
                    window.location = '#' + href[1];
Henning Leutz's avatar
Henning Leutz committed
            }).toElement(Article);
Henning Leutz's avatar
Henning Leutz committed
        },

        /**
         * Scroll the window to top and clear the anchor
         *
         * @param {DOMEvent} [event] - (optional) click dom event
         */
Henning Leutz's avatar
Henning Leutz committed
        scrollToTop: function (event) {
            if (typeOf(event) === 'domevent') {
Henning Leutz's avatar
Henning Leutz committed
                event.stop();
            }

            new Fx.Scroll(window, {
Henning Leutz's avatar
Henning Leutz committed
                onComplete: function () {
Henning Leutz's avatar
Henning Leutz committed
                    window.location = '#';
                }
            }).toTop();
        }
    });
});