All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.org.richfaces.datascroller.js Maven / Gradle / Ivy

There is a newer version: 4.6.21.ayg
Show newest version
(function ($, rf) {

    rf.ui = rf.ui || {};

    var initButtons = function(buttons, css, component) {
        var id;

        var fn = function(e) {
            e.data.fn.call(e.data.component, e);
        };

        var data = {};
        data.component = component;

        for (id in buttons) {
            if (buttons.hasOwnProperty(id)) {
                var element = $(document.getElementById(id));
    
                data.id = id;
                data.page = buttons[id];
                data.element = element;
                data.fn = component.processClick;
    
                element.on('click', copy(data), fn);
            }
        }
    };

    var copy = function(data) {
        var key;
        var eventData = {};

        for (key in data) {
            if (data.hasOwnProperty(key)) {
                eventData[key] = data[key];
            }
        }

        return eventData;
    };

    var togglePressClass = function(el, event) {
        if (event.type == 'mousedown') {
            el.addClass('rf-ds-press');
        } else if (event.type == 'mouseup' || event.type == 'mouseout') {
            el.removeClass('rf-ds-press');
        }
    };

    /**
     * Backing object for rich:dataScroller
     * 
     * @extends RichFaces.BaseComponent
     * @memberOf! RichFaces.ui
     * @constructs RichFaces.ui.DataScroller
     * 
     * @param id
     * @param submit
     * @param options
     */
    rf.ui.DataScroller = function(id, submit, options) {

        $super.constructor.call(this, id);

        var dataScrollerElement = this.attachToDom();

        this.options = options;
        this.currentPage = options.currentPage;

        if (submit && typeof submit == 'function') {
            RichFaces.Event.bindById(id, this.getScrollEventName(), submit);
        }

        var css = {};

        if (options.buttons) {

            $(dataScrollerElement).on('mouseup mousedown mouseout', '.rf-ds-btn', function(event) {
                if ($(this).hasClass('rf-ds-dis')) {
                    $(this).removeClass('rf-ds-press');
                } else {
                    togglePressClass($(this), event);
                }
            });

            initButtons(options.buttons.left, css, this);
            initButtons(options.buttons.right, css, this);
        }

        if (options.digitals) {

            $(dataScrollerElement).on('mouseup mousedown mouseout', '.rf-ds-nmb-btn', function(event) {
                togglePressClass($(this), event);
            });

            initButtons(options.digitals, css, this);
        }
    };

    rf.BaseComponent.extend(rf.ui.DataScroller);
    var $super = rf.ui.DataScroller.$super;

    $.extend(rf.ui.DataScroller.prototype, (function () {

        var scrollEventName = "rich:datascroller:onscroll";

        return {

            name: "RichFaces.ui.DataScroller",

            processClick: function(event) {
                var data = event.data;
                if (data) {
                    var page = data.page;
                    if (page) {
                        this.switchToPage(page);
                    }
                }
            },

            /**
             * Switch to a page
             * 
             * @method
             * @name RichFaces.ui.DataScroller#switchToPage
             * @param page {int|string} page number or a string identifier ("next", "previous", "first", "last", "fastForward", "fastRewind")
             */
            switchToPage: function(page) {
                if (typeof page != 'undefined' && page != null) {
                    RichFaces.Event.fireById(this.id, this.getScrollEventName(), {'page' : page});
                }
            },

            /**
             * Skip forward to a new page based on @fastStep
             * 
             * @method
             * @name RichFaces.ui.DataScroller#fastForward
             */
            fastForward: function() {
                this.switchToPage("fastForward");
            },

            /**
             * Skip backward to a new page based on @fastStep
             * 
             * @method
             * @name RichFaces.ui.DataScroller#fastRewind
             */
            fastRewind: function() {
                this.switchToPage("fastRewind");
            },

            /**
             * Switch to the next page
             * 
             * @method
             * @name RichFaces.ui.DataScroller#next
             */
            next: function() {
                this.switchToPage("next");
            },

            /**
             * Switch to the previous page
             * 
             * @method
             * @name RichFaces.ui.DataScroller#fastForward
             */
            previous: function() {
                this.switchToPage("previous");
            },

            /**
             * Switch to the first page
             * 
             * @method
             * @name RichFaces.ui.DataScroller#fastForward
             */
            first: function() {
                this.switchToPage("first");
            },

            /**
             * Switch to the last page
             * 
             * @method
             * @name RichFaces.ui.DataScroller#fastForward
             */
            last: function() {
                this.switchToPage("last");
            },

            getScrollEventName: function() {
                return scrollEventName;
            },
            destroy: function() {
                $super.destroy.call(this);
            }
        }

    })());

})(RichFaces.jQuery, window.RichFaces);




© 2015 - 2024 Weber Informatics LLC | Privacy Policy