337 lines
No EOL
50 KiB
HTML
337 lines
No EOL
50 KiB
HTML
<html><head><title>DefaultDataModel.js</title><link rel="stylesheet" type="text/css" href="../style.css" media="screen"/></head><body><div class="hl-main"><pre>
|
|
</span><span class="hl-comment">/**
|
|
* @class YAHOO.ext.grid.DefaultDataModel
|
|
* This is the default implementation of a DataModel used by the Grid. It works
|
|
* with multi-dimensional array based data. Using the event system in the base class
|
|
* {@link YAHOO.ext.grid.AbstractDataModel}, all updates to this DataModel are automatically
|
|
* reflected in the user interface.
|
|
* <br>Usage:<br>
|
|
* <pre><code>
|
|
* var myData = [
|
|
["MSFT","Microsoft Corporation", "314,571.156", "32,187.000", "55000"],
|
|
["ORCL", "Oracle Corporation", "62,615.266", "9,519.000", "40650"]
|
|
* ];
|
|
* var dataModel = new YAHOO.ext.grid.DefaultDataModel(myData);
|
|
* </code></pre>
|
|
* @extends YAHOO.ext.grid.AbstractDataModel
|
|
* @constructor
|
|
* @param {Array} data
|
|
*/
|
|
</span><span class="hl-identifier">YAHOO</span><span class="hl-default">.</span><span class="hl-identifier">ext</span><span class="hl-default">.</span><span class="hl-identifier">grid</span><span class="hl-default">.</span><span class="hl-identifier">DefaultDataModel</span><span class="hl-default"> = </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">data</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">YAHOO</span><span class="hl-code">.</span><span class="hl-identifier">ext</span><span class="hl-code">.</span><span class="hl-identifier">grid</span><span class="hl-code">.</span><span class="hl-identifier">DefaultDataModel</span><span class="hl-code">.</span><span class="hl-identifier">superclass</span><span class="hl-code">.</span><span class="hl-identifier">constructor</span><span class="hl-code">.</span><span class="hl-identifier">call</span><span class="hl-brackets">(</span><span class="hl-reserved">this</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-comment">/**@private*/
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code"> = </span><span class="hl-identifier">data</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-default">;
|
|
</span><span class="hl-identifier">YAHOO</span><span class="hl-default">.</span><span class="hl-identifier">extendX</span><span class="hl-brackets">(</span><span class="hl-identifier">YAHOO</span><span class="hl-code">.</span><span class="hl-identifier">ext</span><span class="hl-code">.</span><span class="hl-identifier">grid</span><span class="hl-code">.</span><span class="hl-identifier">DefaultDataModel</span><span class="hl-code">, </span><span class="hl-identifier">YAHOO</span><span class="hl-code">.</span><span class="hl-identifier">ext</span><span class="hl-code">.</span><span class="hl-identifier">grid</span><span class="hl-code">.</span><span class="hl-identifier">AbstractDataModel</span><span class="hl-code">, </span><span class="hl-brackets">{
|
|
</span><span class="hl-comment">/**
|
|
* Returns the number of rows in the dataset
|
|
* @return {Number}
|
|
*/
|
|
</span><span class="hl-identifier">getRowCount</span><span class="hl-code"> : </span><span class="hl-reserved">function</span><span class="hl-brackets">(){
|
|
</span><span class="hl-reserved">return this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Returns the ID of the specified row. By default it return the value of the first column.
|
|
* Override to provide more advanced ID handling.
|
|
* @return {Number}
|
|
*/
|
|
</span><span class="hl-identifier">getRowId</span><span class="hl-code"> : </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">rowIndex</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">return this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-brackets">[</span><span class="hl-identifier">rowIndex</span><span class="hl-brackets">][</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Returns the column data for the specified row.
|
|
* @return {Array}
|
|
*/
|
|
</span><span class="hl-identifier">getRow</span><span class="hl-code"> : </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">rowIndex</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">return this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-brackets">[</span><span class="hl-identifier">rowIndex</span><span class="hl-brackets">]</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Returns the column data for the specified rows as a
|
|
* multi-dimensional array: rows[3][0] would give you the value of row 4, column 0.
|
|
* @param {Array} indexes The row indexes to fetch
|
|
* @return {Array}
|
|
*/
|
|
</span><span class="hl-identifier">getRows</span><span class="hl-code"> : </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">indexes</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">data</span><span class="hl-code"> = </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">r</span><span class="hl-code"> = </span><span class="hl-brackets">[]</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">for</span><span class="hl-brackets">(</span><span class="hl-reserved">var </span><span class="hl-identifier">i</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code"> < </span><span class="hl-identifier">indexes</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">++</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">r</span><span class="hl-code">.</span><span class="hl-identifier">push</span><span class="hl-brackets">(</span><span class="hl-identifier">data</span><span class="hl-brackets">[</span><span class="hl-identifier">indexes</span><span class="hl-brackets">[</span><span class="hl-identifier">i</span><span class="hl-brackets">]])</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
</span><span class="hl-reserved">return </span><span class="hl-identifier">r</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Returns the value at the specified data position
|
|
* @param {Number} rowIndex
|
|
* @param {Number} colIndex
|
|
* @return {Object}
|
|
*/
|
|
</span><span class="hl-identifier">getValueAt</span><span class="hl-code"> : </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">rowIndex</span><span class="hl-code">, </span><span class="hl-identifier">colIndex</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">return this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-brackets">[</span><span class="hl-identifier">rowIndex</span><span class="hl-brackets">][</span><span class="hl-identifier">colIndex</span><span class="hl-brackets">]</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Sets the specified value at the specified data position
|
|
* @param {Object} value The new value
|
|
* @param {Number} rowIndex
|
|
* @param {Number} colIndex
|
|
*/
|
|
</span><span class="hl-identifier">setValueAt</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">value</span><span class="hl-code">, </span><span class="hl-identifier">rowIndex</span><span class="hl-code">, </span><span class="hl-identifier">colIndex</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-brackets">[</span><span class="hl-identifier">rowIndex</span><span class="hl-brackets">][</span><span class="hl-identifier">colIndex</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-identifier">value</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">fireCellUpdated</span><span class="hl-brackets">(</span><span class="hl-identifier">rowIndex</span><span class="hl-code">, </span><span class="hl-identifier">colIndex</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* @private
|
|
* Removes the specified range of rows.
|
|
* @param {Number} startIndex
|
|
* @param {<i>Number</i>} endIndex (optional) Defaults to startIndex
|
|
*/
|
|
</span><span class="hl-identifier">removeRows</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">startIndex</span><span class="hl-code">, </span><span class="hl-identifier">endIndex</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">endIndex</span><span class="hl-code"> = </span><span class="hl-identifier">endIndex</span><span class="hl-code"> || </span><span class="hl-identifier">startIndex</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">.</span><span class="hl-identifier">splice</span><span class="hl-brackets">(</span><span class="hl-identifier">startIndex</span><span class="hl-code">, </span><span class="hl-identifier">endIndex</span><span class="hl-code">-</span><span class="hl-identifier">startIndex</span><span class="hl-code">+</span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">fireRowsDeleted</span><span class="hl-brackets">(</span><span class="hl-identifier">startIndex</span><span class="hl-code">, </span><span class="hl-identifier">endIndex</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Remove a row.
|
|
* @param {Number} index
|
|
*/
|
|
</span><span class="hl-identifier">removeRow</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">index</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">.</span><span class="hl-identifier">splice</span><span class="hl-brackets">(</span><span class="hl-identifier">index</span><span class="hl-code">, </span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">fireRowsDeleted</span><span class="hl-brackets">(</span><span class="hl-identifier">index</span><span class="hl-code">, </span><span class="hl-identifier">index</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* @private
|
|
* Removes all rows.
|
|
*/
|
|
</span><span class="hl-identifier">removeAll</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(){
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">count</span><span class="hl-code"> = </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">getRowCount</span><span class="hl-brackets">()</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">count</span><span class="hl-code"> > </span><span class="hl-number">0</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">removeRows</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">count</span><span class="hl-code">-</span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Query the DataModel rows by the filters defined in spec, for example...
|
|
* <pre><code>
|
|
* // column 1 starts with Jack, column 2 filtered by myFcn, column 3 equals 'Fred'
|
|
* dataModel.filter({1: /^Jack.+/i}, 2: myFcn, 3: 'Fred'});
|
|
* </code></pre>
|
|
* @param {Object} spec The spec is generally an object literal consisting of
|
|
* column index and filter type. The filter type can be a string/number (exact match),
|
|
* a regular expression to test using String.search() or a function to call. If it's a function,
|
|
* it will be called with the value for the specified column and an array of the all column
|
|
* values for that row: yourFcn(value, columnData). If it returns anything other than true,
|
|
* the row is not a match. If you have modified Object.prototype this method may fail.
|
|
* @param {Boolean} returnUnmatched True to return rows which <b>don't</b> match the query instead
|
|
* of rows that do match
|
|
* @return {Array} An array of row indexes that match
|
|
*/
|
|
</span><span class="hl-identifier">query</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">spec</span><span class="hl-code">, </span><span class="hl-identifier">returnUnmatched</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">d</span><span class="hl-code"> = </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">r</span><span class="hl-code"> = </span><span class="hl-brackets">[]</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">for</span><span class="hl-brackets">(</span><span class="hl-reserved">var </span><span class="hl-identifier">i</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code"> < </span><span class="hl-identifier">d</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">++</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">row</span><span class="hl-code"> = </span><span class="hl-identifier">d</span><span class="hl-brackets">[</span><span class="hl-identifier">i</span><span class="hl-brackets">]</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">isMatch</span><span class="hl-code"> = </span><span class="hl-reserved">true</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">for</span><span class="hl-brackets">(</span><span class="hl-reserved">var </span><span class="hl-identifier">col </span><span class="hl-reserved">in </span><span class="hl-identifier">spec</span><span class="hl-brackets">){
|
|
</span><span class="hl-comment">//if(typeof spec[col] != 'function'){
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-identifier">isMatch</span><span class="hl-brackets">) </span><span class="hl-reserved">continue</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">filter</span><span class="hl-code"> = </span><span class="hl-identifier">spec</span><span class="hl-brackets">[</span><span class="hl-identifier">col</span><span class="hl-brackets">]</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">switch</span><span class="hl-brackets">(</span><span class="hl-reserved">typeof </span><span class="hl-identifier">filter</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">case </span><span class="hl-quotes">'</span><span class="hl-string">string</span><span class="hl-quotes">'</span><span class="hl-code">:
|
|
</span><span class="hl-reserved">case </span><span class="hl-quotes">'</span><span class="hl-string">number</span><span class="hl-quotes">'</span><span class="hl-code">:
|
|
</span><span class="hl-reserved">case </span><span class="hl-quotes">'</span><span class="hl-string">boolean</span><span class="hl-quotes">'</span><span class="hl-code">:
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">row</span><span class="hl-brackets">[</span><span class="hl-identifier">col</span><span class="hl-brackets">]</span><span class="hl-code"> != </span><span class="hl-identifier">filter</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">isMatch</span><span class="hl-code"> = </span><span class="hl-reserved">false</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
</span><span class="hl-reserved">break</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">case </span><span class="hl-quotes">'</span><span class="hl-string">function</span><span class="hl-quotes">'</span><span class="hl-code">:
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-identifier">filter</span><span class="hl-brackets">(</span><span class="hl-identifier">row</span><span class="hl-brackets">[</span><span class="hl-identifier">col</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-identifier">row</span><span class="hl-brackets">)){
|
|
</span><span class="hl-identifier">isMatch</span><span class="hl-code"> = </span><span class="hl-reserved">false</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
</span><span class="hl-reserved">break</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">case </span><span class="hl-quotes">'</span><span class="hl-string">object</span><span class="hl-quotes">'</span><span class="hl-code">:
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">filter </span><span class="hl-reserved">instanceof </span><span class="hl-builtin">RegExp</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-builtin">String</span><span class="hl-brackets">(</span><span class="hl-identifier">row</span><span class="hl-brackets">[</span><span class="hl-identifier">col</span><span class="hl-brackets">])</span><span class="hl-code">.</span><span class="hl-identifier">search</span><span class="hl-brackets">(</span><span class="hl-identifier">filter</span><span class="hl-brackets">)</span><span class="hl-code"> === -</span><span class="hl-number">1</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">isMatch</span><span class="hl-code"> = </span><span class="hl-reserved">false</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
}
|
|
</span><span class="hl-reserved">break</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
</span><span class="hl-comment">//}
|
|
</span><span class="hl-brackets">}
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">isMatch</span><span class="hl-code"> && !</span><span class="hl-identifier">returnUnmatched</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">r</span><span class="hl-code">.</span><span class="hl-identifier">push</span><span class="hl-brackets">(</span><span class="hl-identifier">i</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-reserved">else if</span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-identifier">isMatch</span><span class="hl-code"> && </span><span class="hl-identifier">returnUnmatched</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">r</span><span class="hl-code">.</span><span class="hl-identifier">push</span><span class="hl-brackets">(</span><span class="hl-identifier">i</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
}
|
|
</span><span class="hl-reserved">return </span><span class="hl-identifier">r</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Filter the DataModel rows by the query defined in spec, see {@link #query} for more details
|
|
* on the query spec.
|
|
* @param {Object} query The query spec {@link #query}
|
|
* @return {Number} The number of rows removed
|
|
*/
|
|
</span><span class="hl-identifier">filter</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">query</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">matches</span><span class="hl-code"> = </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">query</span><span class="hl-brackets">(</span><span class="hl-identifier">query</span><span class="hl-code">, </span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">data</span><span class="hl-code"> = </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">;
|
|
</span><span class="hl-comment">// go thru the data setting matches to deleted
|
|
// while not disturbing row indexes
|
|
</span><span class="hl-reserved">for</span><span class="hl-brackets">(</span><span class="hl-reserved">var </span><span class="hl-identifier">i</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code"> < </span><span class="hl-identifier">matches</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">++</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">data</span><span class="hl-brackets">[</span><span class="hl-identifier">matches</span><span class="hl-brackets">[</span><span class="hl-identifier">i</span><span class="hl-brackets">]]</span><span class="hl-code">.</span><span class="hl-identifier">_deleted</span><span class="hl-code"> = </span><span class="hl-reserved">true</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
</span><span class="hl-reserved">for</span><span class="hl-brackets">(</span><span class="hl-reserved">var </span><span class="hl-identifier">i</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code"> < </span><span class="hl-identifier">data</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">++</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">while</span><span class="hl-brackets">(</span><span class="hl-identifier">data</span><span class="hl-brackets">[</span><span class="hl-identifier">i</span><span class="hl-brackets">]</span><span class="hl-code"> && </span><span class="hl-identifier">data</span><span class="hl-brackets">[</span><span class="hl-identifier">i</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">_deleted</span><span class="hl-code"> === </span><span class="hl-reserved">true</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">removeRow</span><span class="hl-brackets">(</span><span class="hl-identifier">i</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
}
|
|
</span><span class="hl-reserved">return </span><span class="hl-identifier">matches</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Adds a row to the dataset.
|
|
* @param {Array} cellValues The array of values for the new row
|
|
* @return {Number} The index of the added row
|
|
*/
|
|
</span><span class="hl-identifier">addRow</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">cellValues</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">.</span><span class="hl-identifier">push</span><span class="hl-brackets">(</span><span class="hl-identifier">cellValues</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">newIndex</span><span class="hl-code"> = </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">-</span><span class="hl-number">1</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">fireRowsInserted</span><span class="hl-brackets">(</span><span class="hl-identifier">newIndex</span><span class="hl-code">, </span><span class="hl-identifier">newIndex</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">applySort</span><span class="hl-brackets">()</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">return </span><span class="hl-identifier">newIndex</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* @private
|
|
* Adds a set of rows.
|
|
* @param {Array} rowData This should be an array of arrays like the constructor takes
|
|
*/
|
|
</span><span class="hl-identifier">addRows</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">rowData</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code"> = </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">.</span><span class="hl-identifier">concat</span><span class="hl-brackets">(</span><span class="hl-identifier">rowData</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">firstIndex</span><span class="hl-code"> = </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">-</span><span class="hl-identifier">rowData</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">fireRowsInserted</span><span class="hl-brackets">(</span><span class="hl-identifier">firstIndex</span><span class="hl-code">, </span><span class="hl-identifier">firstIndex</span><span class="hl-code">+</span><span class="hl-identifier">rowData</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">-</span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">applySort</span><span class="hl-brackets">()</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Inserts a row a the specified location in the dataset.
|
|
* @param {Number} index The index where the row should be inserted
|
|
* @param {Array} cellValues The array of values for the new row
|
|
* @return {Number} The index the row was inserted in
|
|
*/
|
|
</span><span class="hl-identifier">insertRow</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">index</span><span class="hl-code">, </span><span class="hl-identifier">cellValues</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">.</span><span class="hl-identifier">splice</span><span class="hl-brackets">(</span><span class="hl-identifier">index</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">cellValues</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">fireRowsInserted</span><span class="hl-brackets">(</span><span class="hl-identifier">index</span><span class="hl-code">, </span><span class="hl-identifier">index</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">applySort</span><span class="hl-brackets">()</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">return </span><span class="hl-identifier">index</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* @private
|
|
* Inserts a set of rows.
|
|
* @param {Number} index The index where the rows should be inserted
|
|
* @param {Array} rowData This should be an array of arrays like the constructor takes
|
|
*/
|
|
</span><span class="hl-identifier">insertRows</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">index</span><span class="hl-code">, </span><span class="hl-identifier">rowData</span><span class="hl-brackets">){
|
|
</span><span class="hl-comment">/*
|
|
if(index == this.data.length){ // try these two first since they are faster
|
|
this.data = this.data.concat(rowData);
|
|
}else if(index == 0){
|
|
this.data = rowData.concat(this.data);
|
|
}else{
|
|
var newData = this.data.slice(0, index);
|
|
newData.concat(rowData);
|
|
newData.concat(this.data.slice(index));
|
|
this.data = newData;
|
|
}*/
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">args</span><span class="hl-code"> = </span><span class="hl-identifier">rowData</span><span class="hl-code">.</span><span class="hl-identifier">concat</span><span class="hl-brackets">()</span><span class="hl-code">;
|
|
</span><span class="hl-identifier">args</span><span class="hl-code">.</span><span class="hl-identifier">splice</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">index</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">.</span><span class="hl-identifier">splice</span><span class="hl-code">.</span><span class="hl-identifier">apply</span><span class="hl-brackets">(</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">, </span><span class="hl-identifier">args</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">fireRowsInserted</span><span class="hl-brackets">(</span><span class="hl-identifier">index</span><span class="hl-code">, </span><span class="hl-identifier">index</span><span class="hl-code">+</span><span class="hl-identifier">rowData</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">-</span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">applySort</span><span class="hl-brackets">()</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Applies the last used sort to the current data.
|
|
*/
|
|
</span><span class="hl-identifier">applySort</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">suppressEvent</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-reserved">typeof this</span><span class="hl-code">.</span><span class="hl-identifier">sortColumn</span><span class="hl-code"> != </span><span class="hl-quotes">'</span><span class="hl-string">undefined</span><span class="hl-quotes">'</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">sort</span><span class="hl-brackets">(</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">sortInfo</span><span class="hl-code">, </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">sortColumn</span><span class="hl-code">, </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">sortDir</span><span class="hl-code">, </span><span class="hl-identifier">suppressEvent</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Sets the default sort info. </span><span class="hl-inlinedoc">Note:</span><span class="hl-comment"> this function does not actually apply the sort.
|
|
* @param {Function/Object} sortInfo A sort comparison function or null to use the default or A object that has a method getSortType(index) that returns a function like
|
|
* a grid column model.
|
|
* @param {Number} columnIndex The column index to sort by
|
|
* @param {String} direction The direction of the sort ('DESC' or 'ASC')
|
|
*/
|
|
</span><span class="hl-identifier">setDefaultSort</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">sortInfo</span><span class="hl-code">, </span><span class="hl-identifier">columnIndex</span><span class="hl-code">, </span><span class="hl-identifier">direction</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">sortInfo</span><span class="hl-code"> = </span><span class="hl-identifier">sortInfo</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">sortColumn</span><span class="hl-code"> = </span><span class="hl-identifier">columnIndex</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">sortDir</span><span class="hl-code"> = </span><span class="hl-identifier">direction</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">,
|
|
</span><span class="hl-comment">/**
|
|
* Sorts the data by the specified column - Uses the sortType specified for the column in the passed columnModel.
|
|
* @param {Function/Object} sortInfo A sort comparison function or null to use the default or A object that has a method getSortType(index) that returns a function like
|
|
* a grid column model.
|
|
* @param {Number} columnIndex The column index to sort by
|
|
* @param {String} direction The direction of the sort ('DESC' or 'ASC')
|
|
*/
|
|
</span><span class="hl-identifier">sort</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">sortInfo</span><span class="hl-code">, </span><span class="hl-identifier">columnIndex</span><span class="hl-code">, </span><span class="hl-identifier">direction</span><span class="hl-code">, </span><span class="hl-identifier">suppressEvent</span><span class="hl-brackets">){
|
|
</span><span class="hl-comment">// store these so we can maintain sorting when we load new data
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">sortInfo</span><span class="hl-code"> = </span><span class="hl-identifier">sortInfo</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">sortColumn</span><span class="hl-code"> = </span><span class="hl-identifier">columnIndex</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">sortDir</span><span class="hl-code"> = </span><span class="hl-identifier">direction</span><span class="hl-code">;
|
|
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">dsc</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">direction</span><span class="hl-code"> && </span><span class="hl-identifier">direction</span><span class="hl-code">.</span><span class="hl-identifier">toUpperCase</span><span class="hl-brackets">()</span><span class="hl-code"> == </span><span class="hl-quotes">'</span><span class="hl-string">DESC</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">sortType</span><span class="hl-code"> = </span><span class="hl-reserved">null</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">sortInfo</span><span class="hl-code"> != </span><span class="hl-reserved">null</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-reserved">typeof </span><span class="hl-identifier">sortInfo</span><span class="hl-code"> == </span><span class="hl-quotes">'</span><span class="hl-string">function</span><span class="hl-quotes">'</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">sortType</span><span class="hl-code"> = </span><span class="hl-identifier">sortInfo</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-reserved">else if</span><span class="hl-brackets">(</span><span class="hl-reserved">typeof </span><span class="hl-identifier">sortInfo</span><span class="hl-code"> == </span><span class="hl-quotes">'</span><span class="hl-string">object</span><span class="hl-quotes">'</span><span class="hl-brackets">){
|
|
</span><span class="hl-identifier">sortType</span><span class="hl-code"> = </span><span class="hl-identifier">sortInfo</span><span class="hl-code">.</span><span class="hl-identifier">getSortType</span><span class="hl-brackets">(</span><span class="hl-identifier">columnIndex</span><span class="hl-brackets">)</span><span class="hl-code">;;
|
|
</span><span class="hl-brackets">}
|
|
}
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">fn</span><span class="hl-code"> = </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">cells</span><span class="hl-code">, </span><span class="hl-identifier">cells2</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">v1</span><span class="hl-code"> = </span><span class="hl-identifier">sortType</span><span class="hl-code"> ? </span><span class="hl-identifier">sortType</span><span class="hl-brackets">(</span><span class="hl-identifier">cells</span><span class="hl-brackets">[</span><span class="hl-identifier">columnIndex</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-identifier">cells</span><span class="hl-brackets">)</span><span class="hl-code"> : </span><span class="hl-identifier">cells</span><span class="hl-brackets">[</span><span class="hl-identifier">columnIndex</span><span class="hl-brackets">]</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">v2</span><span class="hl-code"> = </span><span class="hl-identifier">sortType</span><span class="hl-code"> ? </span><span class="hl-identifier">sortType</span><span class="hl-brackets">(</span><span class="hl-identifier">cells2</span><span class="hl-brackets">[</span><span class="hl-identifier">columnIndex</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-identifier">cells2</span><span class="hl-brackets">)</span><span class="hl-code"> : </span><span class="hl-identifier">cells2</span><span class="hl-brackets">[</span><span class="hl-identifier">columnIndex</span><span class="hl-brackets">]</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">v1</span><span class="hl-code"> < </span><span class="hl-identifier">v2</span><span class="hl-brackets">)
|
|
</span><span class="hl-reserved">return </span><span class="hl-identifier">dsc</span><span class="hl-code"> ? +</span><span class="hl-number">1</span><span class="hl-code"> : -</span><span class="hl-number">1</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">v1</span><span class="hl-code"> > </span><span class="hl-identifier">v2</span><span class="hl-brackets">)
|
|
</span><span class="hl-reserved">return </span><span class="hl-identifier">dsc</span><span class="hl-code"> ? -</span><span class="hl-number">1</span><span class="hl-code"> : +</span><span class="hl-number">1</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">.</span><span class="hl-identifier">sort</span><span class="hl-brackets">(</span><span class="hl-identifier">fn</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-identifier">suppressEvent</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">fireRowsSorted</span><span class="hl-brackets">(</span><span class="hl-identifier">columnIndex</span><span class="hl-code">, </span><span class="hl-identifier">direction</span><span class="hl-brackets">)</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
}</span><span class="hl-code">,
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Calls passed function with each rows data - if the function returns false it stops.
|
|
* @param {Function} fn
|
|
* @param {Object} scope (optional)
|
|
*/
|
|
</span><span class="hl-identifier">each</span><span class="hl-code">: </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">fn</span><span class="hl-code">, </span><span class="hl-identifier">scope</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">d</span><span class="hl-code"> = </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">data</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">for</span><span class="hl-brackets">(</span><span class="hl-reserved">var </span><span class="hl-identifier">i</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">len</span><span class="hl-code"> = </span><span class="hl-identifier">d</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code"> < </span><span class="hl-identifier">len</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">++</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">fn</span><span class="hl-code">.</span><span class="hl-identifier">call</span><span class="hl-brackets">(</span><span class="hl-identifier">scope</span><span class="hl-code"> || </span><span class="hl-builtin">window</span><span class="hl-code">, </span><span class="hl-identifier">d</span><span class="hl-brackets">[</span><span class="hl-identifier">i</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-identifier">i</span><span class="hl-brackets">)</span><span class="hl-code"> === </span><span class="hl-reserved">false</span><span class="hl-brackets">) </span><span class="hl-reserved">break</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
}
|
|
})</span><span class="hl-default">;
|
|
|
|
</span><span class="hl-comment">/**
|
|
* Alias to YAHOO.ext.grid.DefaultColumnModel.sortTypes
|
|
* @static
|
|
*/
|
|
</span><span class="hl-identifier">YAHOO</span><span class="hl-default">.</span><span class="hl-identifier">ext</span><span class="hl-default">.</span><span class="hl-identifier">grid</span><span class="hl-default">.</span><span class="hl-identifier">DefaultDataModel</span><span class="hl-default">.</span><span class="hl-identifier">sortTypes</span><span class="hl-default"> = </span><span class="hl-identifier">YAHOO</span><span class="hl-default">.</span><span class="hl-identifier">ext</span><span class="hl-default">.</span><span class="hl-identifier">grid</span><span class="hl-default">.</span><span class="hl-identifier">DefaultColumnModel</span><span class="hl-default">.</span><span class="hl-identifier">sortTypes</span><span class="hl-default">;</span></pre></div><hr>Copyright © 2006 Jack Slocum. All rights reserved.</body></html> |