Version 3.18.1
Show:

File: recordset/js/recordset-filter.js

            /**
             * Plugin that provides the ability to filter through a recordset.
             * Uses the filter methods available on Y.Array (see arrayextras submodule) to filter the recordset.
             * @module recordset
             * @submodule recordset-filter
             */
            
            
            var YArray = Y.Array,
            Lang = Y.Lang;
            
            
            /**
             * Plugin that provides the ability to filter through a recordset.
             * Uses the filter methods available on Y.Array (see arrayextras submodule) to filter the recordset.
             * @class RecordsetFilter
             */
            function RecordsetFilter(config) {
                RecordsetFilter.superclass.constructor.apply(this, arguments);
            }
            
            Y.mix(RecordsetFilter, {
                NS: "filter",
            
                NAME: "recordsetFilter",
            
                ATTRS: {
                }
            
            });
            
            
            Y.extend(RecordsetFilter, Y.Plugin.Base, {
            
            
                /**
                Filter through the recordset with a custom filter function, or a key-value
                pair.
            
                @method filter
                @param {Function|String} filter A custom filter function or a string
                    representing the key to filter by.
                @param {Any} [value] If filtering by key (_filter_ is a string), further
                    filter by a specific value.
                @return {Recordset} A new filtered Recordset instance
                **/
                filter: function (filter, value) {
                    var recs = this.get('host').get('records'),
                        key;
            
                    //If a key-value pair is passed in, generate a custom function
                    if (value && Lang.isString(filter)) {
                        key = filter;
                        filter = function(item) {
                            return (item.getValue(key) === value);
                        };
                    }
            
                    //TODO: PARENT CHILD RELATIONSHIP
                    return new Y.Recordset({
                        records: YArray.filter(recs, filter)
                    });
                },
            
                /**
                The inverse of filter. Executes the supplied function on each item. Returns
                a new Recordset containing the items that the supplied function returned
                `false` for.
            
                @method reject
                @param {Function} filter A boolean function, executed on each item.
                @return {Recordset} A new Recordset instance containing the items on which
                    the supplied function returned false.
                **/
                reject: function (filter) {
                    return new Y.Recordset({
                        records: YArray.reject(this.get('host').get('records'), filter)
                    });
                },
            
                /**
                Iterates over the Recordset, returning a new Recordset of all the elements
                that match the supplied regular expression
            
                @method grep
                @param {RegExp} pattern The regular expression to test against each record.
                @return {Recordset} A Recordset instance containing all the items in the
                    collection that produce a match against the supplied regular
                    expression. If no items match, an empty Recordset instance is returned.
                **/
                grep: function (pattern) {
                    return new Y.Recordset({
                        records: YArray.grep(this.get('host').get('records'), pattern)
                    });
                }
            
                //TODO: Add more pass-through methods to arrayextras
            });
            
            Y.namespace("Plugin").RecordsetFilter = RecordsetFilter;