Source Code of: DS_MultDimJSArray.js
Date Last Modified: May 02, 2009 - 01:59:21 AM
Size: 5 KB  |  169 lines  |  5,373 characters
/*
This code is based on YUI's Autocomplete 
component (YAHOO.widget.AutoComplete). The 
license of that component is as follows:

Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.2.1


*/



/****************************************************************************/
/****************************************************************************/
/****************************************************************************/

/**
 * Implementation of YAHOO.widget.DataSource using a native Javascript array as
 * its live data source. Extended YAHOO.widget.DS_JSArray to provide multiple 
 * dimension support.
 *
 * @class DS_MultDimJSArray
 * @constructor
 * @extends YAHOO.widget.DS_JSArray
 * @param aData {String[]} In-memory Javascript array of simple string data.
 * @param oConfigs {Object} (optional) Object literal of config params.
 */
PA.DPW.ECIS.DS_MultDimJSArray = function(aData, oConfigs) {
    // Set any config params passed in to override defaults
    if(typeof oConfigs == "object") {
        for(var sConfig in oConfigs) {
            this[sConfig] = oConfigs[sConfig];
        }
    }

    // Initialization sequence
    if(!aData || (aData.constructor != Array)) {
        return;
    }
    else {
        this.data = aData;
        this._init();
    }
    
};

PA.DPW.ECIS.DS_MultDimJSArray.prototype = new YAHOO.widget.DS_JSArray();

/////////////////////////////////////////////////////////////////////////////
//
// Private member variables
//
/////////////////////////////////////////////////////////////////////////////

/**
 * Array of indexes of columns that should be searched against.
 *
 * @property _searchColumns
 * @type Array
 */
PA.DPW.ECIS.DS_MultDimJSArray.prototype._searchColumns = null;

/////////////////////////////////////////////////////////////////////////////
//
// Public methods
//
/////////////////////////////////////////////////////////////////////////////


/**
 * Add a column index to the columns to query against.
 *
 * @param iColumnIndex {int} The index of the data set to add to the 
 *  list of array indexes to query against.
 */
PA.DPW.ECIS.DS_MultDimJSArray.prototype.addSearchIndex = function(iColumnIndex) 
{
    
    if (iColumnIndex >= 0) {
        if (this._searchColumns == null) this._searchColumns = [];
        this._searchColumns[this._searchColumns.length] = iColumnIndex;
    }
}


/**
 * Clear the list of column indexes to query against.
 */
PA.DPW.ECIS.DS_MultDimJSArray.prototype.clearSearchIndexes = function() 
{
    this._searchColumns = null;
}



/**
 * Queries the live data source defined by data for results. Results are passed
 * back to a callback function.
 *
 * @method doQuery
 * @param oCallbackFn {HTMLFunction} Callback function defined by oParent object to which to return results.
 * @param sQuery {String} Query string.
 * @param oParent {Object} The object instance that has requested data.
 */
PA.DPW.ECIS.DS_MultDimJSArray.prototype.doQuery = function(oCallbackFn, sQuery, oParent) 
{
    var i, k;
    var aData = this.data; // the array
    var aResults = []; // container for results
    var bMatchContains = this.queryMatchContains;
    var searchCols = this._searchColumns;
    if (searchCols == null) {
        searchCols  = [0]; // search only key by default (behavior of superclass)
    }
    
    if(sQuery) {
        if(!this.queryMatchCase) {
            sQuery = sQuery.toLowerCase();
        }

        // Loop through each element of the array...
        // which can be a string or an array of strings
        for(i = aData.length-1; i >= 0; i--) {
            for (k = 0; k < searchCols.length; k++) {
                var aDataset = [];

                if(YAHOO.lang.isString(aData[i])) {
                    aDataset[searchCols[k]] = aData[i];
                }
                else if(YAHOO.lang.isArray(aData[i])) {
                    aDataset = aData[i];
                }

                if(YAHOO.lang.isString(aDataset[searchCols[k]])) {
                    var sKeyIndex = (this.queryMatchCase) ?
                        encodeURIComponent(aDataset[searchCols[k]]).indexOf(sQuery):
                        encodeURIComponent(aDataset[searchCols[k]]).toLowerCase().indexOf(sQuery);

                    // A STARTSWITH match is when the query is found at the beginning of the key string...
                    if((!bMatchContains && (sKeyIndex === 0)) ||
                            // A CONTAINS match is when the query is found anywhere within the key string...
                            (bMatchContains && (sKeyIndex > -1))) {
                        // Stash a match into aResults[].
                        aResults.unshift(aDataset);
                        // break to avoid dupes
                        break;
                    }
                }
            }
        }
    }
    else {
        // empty query, so return all results
        for(i = aData.length-1; i >= 0; i--) {
            if(YAHOO.lang.isString(aData[i])) {
                aResults.unshift([aData[i]]);
            }
            else if(YAHOO.lang.isArray(aData[i])) {
                aResults.unshift(aData[i]);
            }
        }
    }
    
    this.getResultsEvent.fire(this, oParent, sQuery, aResults);
    oCallbackFn(sQuery, aResults, oParent);
};

A Derivative Work of: PHP Source Code Utility - Version 1.0.0 Copyright © 0php.com 2002.