API Docs for: 1.0.0
Show:

File: Resources/public/js/extensions/ez-processable.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-processable', function (Y) {
    "use strict";
    /**
     * The processable extension
     *
     * @module ez-processable
     */
    Y.namespace('eZ');

    /**
     * View extension providing the concept of processor. The processors are
     * run after the event indicated by the `_processEvent` property.
     *
     * @namespace eZ
     * @class Processable
     * @extensionfor Y.View
     */
    Y.eZ.Processable = Y.Base.create('processableExtension', Y.View, [], {
        initializer: function () {
            /**
             * Holds the event(s) after which the processing should be triggered.
             *
             * @property _processEvent
             * @type {String|Array}
             * @required
             */
            this.after(this._processEvent, this._process);
        },

        /**
         * Adds a processor to the list with the given priority. A processor is
         * an object that should have a `process` method. When run, the
         * processor will receive the view being processed.
         *
         * @method addProcessor
         * @param {Object} processor
         * @param {Number} priority
         */
        addProcessor: function (processor, priority) {
            var processors = this.get('processors');

            if ( typeof processor.process !== 'function' ) {
                throw new Error("Processor must have a process method");
            }
            processors.push({
                processor: processor,
                priority: priority,
            });
            processors.sort(function (a, b) {
                return (b.priority - a.priority);
            });
        },

        /**
         * Removes one or several processors matching the given `matchingFn`
         * function.
         *
         * @method removeProcessor
         * @param {Function} matchingFn it receives the processor and if it
         * returns a truthy value, the corresponding processor is excluded from
         * the list.
         */
        removeProcessor: function (matchingFn) {
            var processors = this.get('processors');

            this._set('processors', processors.filter(function () {
                return !matchingFn.apply(this, arguments);
            }, this));
        },

        /**
         * Loops through the processors to run them on the view.
         *
         * @method _process
         * @protected
         * @param {EventFacade} [event] the event parameters of the event
         * triggering the process (if any)
         */
        _process: function (event) {
            this.get('processors').forEach(function (info) {
                info.processor.process(this, event);
            }, this);
        },
    }, {
        ATTRS: {
            /**
             * Holds the processors. Each entry is an object containing 2
             * properties:
             * - `processor` the processor
             * - `priority` its priority
             *
             * @attribute priority
             * @type {Array}
             * @readOnly
             */
            processors: {
                writeOnce: 'initOnly',
                value: [],
            },
        },
    });
});