webgui/www/extras/yui/docs/DataTable.js.html
JT Smith 20f8df1291 upgrading to YUI 2.6
data tables are going to need some work yet, but the other stuff seems to be working 100%
2008-10-22 23:53:29 +00:00

11693 lines
1.3 MiB

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>API: datatable DataTable.js (YUI Library)</title>
<link rel="stylesheet" type="text/css" href="assets/api.css">
<script type="text/javascript" src="assets/api-js"></script>
<script type="text/javascript" src="assets/ac-js"></script>
</head>
<body id="yahoo-com">
<div id="doc3" class="yui-t2">
<div id="hd">
<a href="http://developer.yahoo.com/yui/"><h1>Yahoo! UI Library</h1></a>
<h3>DataTable Widget&nbsp; <span class="subtitle">2.6.0</span></h3>
<p>
<a href="./index.html">Yahoo! UI Library</a>
&gt; <a href="./module_datatable.html">datatable</a>
&gt; DataTable.js (source view)
</p>
</div>
<div id="bd">
<div id="yui-main">
<div class="yui-b">
<form name="yui-classopts-form">
<span id="classopts"><input type="checkbox" name="showprivate" id="showprivate" /> <label for="showprivate">Show Private</label></span>
<span id="classopts"><input type="checkbox" name="showprotected" id="showprotected" /> <label for="showprotected">Show Protected</label></span>
<span id="classopts"><input type="checkbox" name="showdeprecated" id="showdeprecated" /> <label for="showdeprecated">Show Deprecated</label></span>
</form>
<div id="srcout">
<style>
#doc3 #classopts { display:none; }
</style>
<div class="highlight" ><pre><span class="o">(</span><span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">lang</span> <span class="o">=</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">lang</span><span class="o">,</span>
<span class="nx">util</span> <span class="o">=</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">,</span>
<span class="nx">widget</span> <span class="o">=</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">,</span>
<span class="nx">ua</span> <span class="o">=</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">env</span><span class="o">.</span><span class="nx">ua</span><span class="o">,</span>
<span class="nx">Dom</span> <span class="o">=</span> <span class="nx">util</span><span class="o">.</span><span class="nx">Dom</span><span class="o">,</span>
<span class="nx">Ev</span> <span class="o">=</span> <span class="nx">util</span><span class="o">.</span><span class="nx">Event</span><span class="o">,</span>
<span class="nx">DS</span> <span class="o">=</span> <span class="nx">util</span><span class="o">.</span><span class="nx">DataSourceBase</span><span class="o">;</span>
<span class="c">/**</span>
<span class="c"> * The DataTable widget provides a progressively enhanced DHTML control for</span>
<span class="c"> * displaying tabular data across A-grade browsers.</span>
<span class="c"> *</span>
<span class="c"> * @module datatable</span>
<span class="c"> * @requires yahoo, dom, event, element, datasource</span>
<span class="c"> * @optional dragdrop, dragdrop</span>
<span class="c"> * @title DataTable Widget</span>
<span class="c"> * @beta</span>
<span class="c"> */</span>
<span class="c">/****************************************************************************/</span>
<span class="c">/****************************************************************************/</span>
<span class="c">/****************************************************************************/</span>
<span class="c">/**</span>
<span class="c"> * DataTable class for the YUI DataTable widget.</span>
<span class="c"> *</span>
<span class="c"> * @namespace YAHOO.widget</span>
<span class="c"> * @class DataTable</span>
<span class="c"> * @extends Element</span>
<span class="c"> * @constructor</span>
<span class="c"> * @param elContainer {HTMLElement} Container element for the TABLE.</span>
<span class="c"> * @param aColumnDefs {Object[]} Array of object literal Column definitions.</span>
<span class="c"> * @param oDataSource {YAHOO.util.DataSource} DataSource instance.</span>
<span class="c"> * @param oConfigs {object} (optional) Object literal of configuration values.</span>
<span class="c"> */</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">DataTable</span> <span class="o">=</span> <span class="k">function</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">,</span><span class="nx">aColumnDefs</span><span class="o">,</span><span class="nx">oDataSource</span><span class="o">,</span><span class="nx">oConfigs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">DT</span> <span class="o">=</span> <span class="nx">widget</span><span class="o">.</span><span class="nx">DataTable</span><span class="o">;</span>
<span class="c">////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span> <span class="c">// Backward compatibility for SDT, but prevent infinite loops</span>
<span class="c"></span>
<span class="k">if</span><span class="o">(</span><span class="nx">oConfigs</span> <span class="o">&amp;&amp;</span> <span class="nx">oConfigs</span><span class="o">.</span><span class="nx">scrollable</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">new</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">ScrollingDataTable</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">,</span><span class="nx">aColumnDefs</span><span class="o">,</span><span class="nx">oDataSource</span><span class="o">,</span><span class="nx">oConfigs</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span> <span class="c">// Initialization</span>
<span class="c"></span>
<span class="c">// Internal vars</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_nIndex</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_nCount</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_sId</span> <span class="o">=</span> <span class="s2">&quot;yui-dt&quot;</span><span class="o">+</span><span class="k">this</span><span class="o">.</span><span class="nx">_nIndex</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">Chain</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;end&quot;</span><span class="o">,</span><span class="k">this</span><span class="o">.</span><span class="nx">_onRenderChainEnd</span><span class="o">,</span> <span class="k">this</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="c">// Initialize configs</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initConfigs</span><span class="o">(</span><span class="nx">oConfigs</span><span class="o">);</span>
<span class="c">// Initialize DataSource</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initDataSource</span><span class="o">(</span><span class="nx">oDataSource</span><span class="o">);</span>
<span class="k">if</span><span class="o">(!</span><span class="k">this</span><span class="o">.</span><span class="nx">_oDataSource</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not instantiate DataTable due to an invalid DataSource&quot;</span><span class="o">,</span> <span class="s2">&quot;error&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Initialize ColumnSet</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initColumnSet</span><span class="o">(</span><span class="nx">aColumnDefs</span><span class="o">);</span>
<span class="k">if</span><span class="o">(!</span><span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not instantiate DataTable due to an invalid ColumnSet&quot;</span><span class="o">,</span> <span class="s2">&quot;error&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Initialize RecordSet</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initRecordSet</span><span class="o">();</span>
<span class="k">if</span><span class="o">(!</span><span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">)</span> <span class="o">{</span>
<span class="o">}</span>
<span class="c">// Initialize Attributes</span>
<span class="c"></span> <span class="nx">DT</span><span class="o">.</span><span class="nx">superclass</span><span class="o">.</span><span class="nx">constructor</span><span class="o">.</span><span class="nx">call</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="nx">elContainer</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">configs</span><span class="o">);</span>
<span class="c">// Initialize DOM elements</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">okDom</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_initDomElements</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">);</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">okDom</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not instantiate DataTable due to an invalid DOM elements&quot;</span><span class="o">,</span> <span class="s2">&quot;error&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Show message as soon as config is available</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">showTableMessage</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;MSG_LOADING&quot;</span><span class="o">),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LOADING</span><span class="o">);</span>
<span class="c">////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span> <span class="c">// Once per instance</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initEvents</span><span class="o">();</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">_nCount</span><span class="o">++;</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">_nCurrentCount</span><span class="o">++;</span>
<span class="c">////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span> <span class="c">// Data integration</span>
<span class="c"></span>
<span class="c">// Send a simple initial request</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oCallback</span> <span class="o">=</span> <span class="o">{</span>
<span class="nx">success</span> <span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">onDataReturnSetRows</span><span class="o">,</span>
<span class="nx">failure</span> <span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">onDataReturnSetRows</span><span class="o">,</span>
<span class="nx">scope</span> <span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">argument</span><span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">getState</span><span class="o">()</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">initialLoad</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;initialLoad&quot;</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">initialLoad</span> <span class="o">===</span> <span class="kc">true</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oDataSource</span><span class="o">.</span><span class="nx">sendRequest</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;initialRequest&quot;</span><span class="o">),</span> <span class="nx">oCallback</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Do not send an initial request at all</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">initialLoad</span> <span class="o">===</span> <span class="kc">false</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">showTableMessage</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;MSG_EMPTY&quot;</span><span class="o">),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_EMPTY</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Send an initial request with a custom payload</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oCustom</span> <span class="o">=</span> <span class="nx">initialLoad</span> <span class="o">||</span> <span class="o">{};</span>
<span class="nx">oCallback</span><span class="o">.</span><span class="nx">argument</span> <span class="o">=</span> <span class="nx">oCustom</span><span class="o">.</span><span class="nx">argument</span> <span class="o">||</span> <span class="o">{};</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oDataSource</span><span class="o">.</span><span class="nx">sendRequest</span><span class="o">(</span><span class="nx">oCustom</span><span class="o">.</span><span class="nx">request</span><span class="o">,</span> <span class="nx">oCallback</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">DT</span> <span class="o">=</span> <span class="nx">widget</span><span class="o">.</span><span class="nx">DataTable</span><span class="o">;</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c">//</span>
<span class="c">// Public constants</span>
<span class="c">//</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span>
<span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</span><span class="o">(</span><span class="nx">DT</span><span class="o">,</span> <span class="o">{</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to outer DataTable container.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_DATATABLE</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_DATATABLE</span> <span class="o">:</span> <span class="s2">&quot;yui-dt&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to liner DIV elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_LINER</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-liner&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_LINER</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-liner&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to display label elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_LABEL</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-label&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_LABEL</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-label&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to messaging elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_MESSAGE</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-message&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_MESSAGE</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-message&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to mask element when DataTable is disabled.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_MASK</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-mask&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_MASK</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-mask&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to data elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_DATA</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-data&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_DATA</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-data&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to Column drag target.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_COLTARGET</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-coltarget&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_COLTARGET</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-coltarget&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to resizer handle elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_RESIZER</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-resizer&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_RESIZER</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-resizer&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to resizer liner elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_RESIZERLINER</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-resizerliner&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_RESIZERLINER</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-resizerliner&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to resizer proxy elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_RESIZERPROXY</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-resizerproxy&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_RESIZERPROXY</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-resizerproxy&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to CellEditor container elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_EDITOR</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-editor&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_EDITOR</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-editor&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to paginator container elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_PAGINATOR</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-paginator&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_PAGINATOR</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-paginator&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to page number indicators.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_PAGE</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-page&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_PAGE</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-page&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to default indicators.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_DEFAULT</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-default&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_DEFAULT</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-default&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to previous indicators.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_PREVIOUS</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-previous&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_PREVIOUS</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-previous&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned next indicators.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_NEXT</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-next&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_NEXT</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-next&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to first elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_FIRST</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-first&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_FIRST</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-first&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to last elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_LAST</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-last&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_LAST</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-last&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to even elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_EVEN</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-even&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_EVEN</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-even&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to odd elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_ODD</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-odd&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_ODD</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-odd&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to selected elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_SELECTED</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-selected&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_SELECTED</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-selected&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to highlighted elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_HIGHLIGHTED</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-highlighted&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_HIGHLIGHTED</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-highlighted&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to hidden elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_HIDDEN</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-hidden&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_HIDDEN</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-hidden&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to disabled elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_DISABLED</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-disabled&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_DISABLED</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-disabled&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to empty indicators.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_EMPTY</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-empty&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_EMPTY</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-empty&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to loading indicatorx.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_LOADING</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-loading&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_LOADING</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-loading&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to error indicators.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_ERROR</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-error&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_ERROR</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-error&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to editable elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_EDITABLE</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-editable&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_EDITABLE</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-editable&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to draggable elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_DRAGGABLE</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-draggable&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_DRAGGABLE</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-draggable&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to resizeable elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_RESIZEABLE</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-resizeable&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_RESIZEABLE</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-resizeable&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to scrollable elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_SCROLLABLE</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-scrollable&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_SCROLLABLE</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-scrollable&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to sortable elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_SORTABLE</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-sortable&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_SORTABLE</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-sortable&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to ascending elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_ASC</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-asc&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_ASC</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-asc&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to descending elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_DESC</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-desc&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_DESC</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-desc&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to BUTTON elements and/or container elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_BUTTON</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-button&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_BUTTON</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-button&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to INPUT TYPE=CHECKBOX elements and/or container elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_CHECKBOX</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-checkbox&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_CHECKBOX</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-checkbox&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to SELECT elements and/or container elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_DROPDOWN</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-dropdown&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_DROPDOWN</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-dropdown&quot;</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Class name assigned to INPUT TYPE=RADIO elements and/or container elements.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable.CLASS_RADIO</span>
<span class="c"> * @type String</span>
<span class="c"> * @static</span>
<span class="c"> * @final</span>
<span class="c"> * @default &quot;yui-dt-radio&quot;</span>
<span class="c"> */</span>
<span class="nx">CLASS_RADIO</span> <span class="o">:</span> <span class="s2">&quot;yui-dt-radio&quot;</span><span class="o">,</span>
<span class="c">/////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span> <span class="c">//</span>
<span class="c"></span> <span class="c">// Private static properties</span>
<span class="c"></span> <span class="c">//</span>
<span class="c"></span> <span class="c">/////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Internal class variable for indexing multiple DataTable instances.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable._nCount</span>
<span class="c"> * @type Number</span>
<span class="c"> * @private</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">_nCount</span> <span class="o">:</span> <span class="m">0</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Internal class variable tracking current number of DataTable instances,</span>
<span class="c"> * so that certain class values can be reset when all instances are destroyed. </span>
<span class="c"> *</span>
<span class="c"> * @property DataTable._nCurrentCount</span>
<span class="c"> * @type Number</span>
<span class="c"> * @private</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">_nCurrentCount</span> <span class="o">:</span> <span class="m">0</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Reference to the STYLE node that is dynamically created and updated</span>
<span class="c"> * in order to manage Column widths.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable._elDynStyleNode</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> * @static </span>
<span class="c"> */</span>
<span class="nx">_elDynStyleNode</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Set to true if _elDynStyleNode cannot be populated due to browser incompatibility.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable._bDynStylesFallback</span>
<span class="c"> * @type boolean</span>
<span class="c"> * @private</span>
<span class="c"> * @static </span>
<span class="c"> */</span>
<span class="nx">_bDynStylesFallback</span> <span class="o">:</span> <span class="o">(</span><span class="nx">ua</span><span class="o">.</span><span class="nx">ie</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">ua</span><span class="o">.</span><span class="nx">ie</span><span class="o">&lt;</span><span class="m">7</span><span class="o">))</span> <span class="o">?</span> <span class="kc">true</span> <span class="o">:</span> <span class="kc">false</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Object literal hash of Columns and their dynamically create style rules.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable._oDynStyles</span>
<span class="c"> * @type Object</span>
<span class="c"> * @private</span>
<span class="c"> * @static </span>
<span class="c"> */</span>
<span class="nx">_oDynStyles</span> <span class="o">:</span> <span class="o">{},</span>
<span class="c">/**</span>
<span class="c"> * Element reference to shared Column drag target.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable._elColumnDragTarget</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> * @static </span>
<span class="c"> */</span>
<span class="nx">_elColumnDragTarget</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Element reference to shared Column resizer proxy.</span>
<span class="c"> *</span>
<span class="c"> * @property DataTable._elColumnResizerProxy</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> * @static </span>
<span class="c"> */</span>
<span class="nx">_elColumnResizerProxy</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span> <span class="c">//</span>
<span class="c"></span> <span class="c">// Private static methods</span>
<span class="c"></span> <span class="c">//</span>
<span class="c"></span> <span class="c">/////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Clones object literal or array of object literals.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable._cloneObject</span>
<span class="c"> * @param o {Object} Object.</span>
<span class="c"> * @private</span>
<span class="c"> * @static </span>
<span class="c"> */</span>
<span class="nx">_cloneObject</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">o</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">o</span><span class="o">))</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">o</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">var</span> <span class="nx">copy</span> <span class="o">=</span> <span class="o">{};</span>
<span class="k">if</span><span class="o">(</span><span class="nx">o</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">BaseCellEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">copy</span> <span class="o">=</span> <span class="nx">o</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isFunction</span><span class="o">(</span><span class="nx">o</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">copy</span> <span class="o">=</span> <span class="nx">o</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isArray</span><span class="o">(</span><span class="nx">o</span><span class="o">))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">array</span> <span class="o">=</span> <span class="o">[];</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span><span class="nx">len</span><span class="o">=</span><span class="nx">o</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span><span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span><span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">array</span><span class="o">[</span><span class="nx">i</span><span class="o">]</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_cloneObject</span><span class="o">(</span><span class="nx">o</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="nx">copy</span> <span class="o">=</span> <span class="nx">array</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isObject</span><span class="o">(</span><span class="nx">o</span><span class="o">))</span> <span class="o">{</span>
<span class="k">for</span> <span class="o">(</span><span class="k">var</span> <span class="nx">x</span> <span class="k">in</span> <span class="nx">o</span><span class="o">){</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">hasOwnProperty</span><span class="o">(</span><span class="nx">o</span><span class="o">,</span> <span class="nx">x</span><span class="o">))</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">o</span><span class="o">[</span><span class="nx">x</span><span class="o">])</span> <span class="o">&amp;&amp;</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isObject</span><span class="o">(</span><span class="nx">o</span><span class="o">[</span><span class="nx">x</span><span class="o">])</span> <span class="o">||</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isArray</span><span class="o">(</span><span class="nx">o</span><span class="o">[</span><span class="nx">x</span><span class="o">]))</span> <span class="o">{</span>
<span class="nx">copy</span><span class="o">[</span><span class="nx">x</span><span class="o">]</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_cloneObject</span><span class="o">(</span><span class="nx">o</span><span class="o">[</span><span class="nx">x</span><span class="o">]);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">copy</span><span class="o">[</span><span class="nx">x</span><span class="o">]</span> <span class="o">=</span> <span class="nx">o</span><span class="o">[</span><span class="nx">x</span><span class="o">];</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">copy</span> <span class="o">=</span> <span class="nx">o</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">copy</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Destroys shared Column drag target.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable._destroyColumnDragTargetEl</span>
<span class="c"> * @private</span>
<span class="c"> * @static </span>
<span class="c"> */</span>
<span class="nx">_destroyColumnDragTargetEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">DT</span><span class="o">.</span><span class="nx">_elColumnDragTarget</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">el</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_elColumnDragTarget</span><span class="o">;</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">Event</span><span class="o">.</span><span class="nx">purgeElement</span><span class="o">(</span><span class="nx">el</span><span class="o">);</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">el</span><span class="o">);</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">_elColumnDragTarget</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Creates HTML markup for shared Column drag target.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable._initColumnDragTargetEl</span>
<span class="c"> * @return {HTMLElement} Reference to Column drag target. </span>
<span class="c"> * @private</span>
<span class="c"> * @static </span>
<span class="c"> */</span>
<span class="nx">_initColumnDragTargetEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">DT</span><span class="o">.</span><span class="nx">_elColumnDragTarget</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Attach Column drag target element as first child of body</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elColumnDragTarget</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s1">&#39;div&#39;</span><span class="o">);</span>
<span class="nx">elColumnDragTarget</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_COLTARGET</span><span class="o">;</span>
<span class="nx">elColumnDragTarget</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="nb">document</span><span class="o">.</span><span class="nx">body</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nx">elColumnDragTarget</span><span class="o">,</span> <span class="nb">document</span><span class="o">.</span><span class="nx">body</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">);</span>
<span class="c">// Internal tracker of Column drag target</span>
<span class="c"></span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_elColumnDragTarget</span> <span class="o">=</span> <span class="nx">elColumnDragTarget</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_elColumnDragTarget</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Destroys shared Column resizer proxy.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable._destroyColumnResizerProxyEl</span>
<span class="c"> * @return {HTMLElement} Reference to Column resizer proxy.</span>
<span class="c"> * @private </span>
<span class="c"> * @static </span>
<span class="c"> */</span>
<span class="nx">_destroyColumnResizerProxyEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">DT</span><span class="o">.</span><span class="nx">_elColumnResizerProxy</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">el</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_elColumnResizerProxy</span><span class="o">;</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">Event</span><span class="o">.</span><span class="nx">purgeElement</span><span class="o">(</span><span class="nx">el</span><span class="o">);</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">el</span><span class="o">);</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">_elColumnResizerProxy</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Creates HTML markup for shared Column resizer proxy.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable._initColumnResizerProxyEl</span>
<span class="c"> * @return {HTMLElement} Reference to Column resizer proxy.</span>
<span class="c"> * @private </span>
<span class="c"> * @static </span>
<span class="c"> */</span>
<span class="nx">_initColumnResizerProxyEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">DT</span><span class="o">.</span><span class="nx">_elColumnResizerProxy</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Attach Column resizer element as first child of body</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elColumnResizerProxy</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;div&quot;</span><span class="o">);</span>
<span class="nx">elColumnResizerProxy</span><span class="o">.</span><span class="nx">id</span> <span class="o">=</span> <span class="s2">&quot;yui-dt-colresizerproxy&quot;</span><span class="o">;</span> <span class="c">// Needed for ColumnResizer</span>
<span class="c"></span> <span class="nx">elColumnResizerProxy</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_RESIZERPROXY</span><span class="o">;</span>
<span class="nb">document</span><span class="o">.</span><span class="nx">body</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nx">elColumnResizerProxy</span><span class="o">,</span> <span class="nb">document</span><span class="o">.</span><span class="nx">body</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">);</span>
<span class="c">// Internal tracker of Column resizer proxy</span>
<span class="c"></span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_elColumnResizerProxy</span> <span class="o">=</span> <span class="nx">elColumnResizerProxy</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_elColumnResizerProxy</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats a BUTTON element.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatButton</span>
<span class="c"> * @param el {HTMLElement} The element to format with markup.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oData {Object | Boolean} Data value for the cell. By default, the value</span>
<span class="c"> * is what gets written to the BUTTON.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">formatButton</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">sValue</span> <span class="o">=</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">oData</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oData</span> <span class="o">:</span> <span class="s2">&quot;Click&quot;</span><span class="o">;</span>
<span class="c">//TODO: support YAHOO.widget.Button</span>
<span class="c"></span> <span class="c">//if(YAHOO.widget.Button) {</span>
<span class="c"></span>
<span class="c">//}</span>
<span class="c"></span> <span class="c">//else {</span>
<span class="c"></span> <span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&quot;&lt;button type=\&quot;button\&quot; class=\&quot;&quot;</span><span class="o">+</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_BUTTON</span> <span class="o">+</span> <span class="s2">&quot;\&quot;&gt;&quot;</span> <span class="o">+</span> <span class="nx">sValue</span> <span class="o">+</span> <span class="s2">&quot;&lt;/button&gt;&quot;</span><span class="o">;</span>
<span class="c">//}</span>
<span class="c"></span> <span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats a CHECKBOX element.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatCheckbox</span>
<span class="c"> * @param el {HTMLElement} The element to format with markup.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oData {Object | Boolean} Data value for the cell. Can be a simple</span>
<span class="c"> * Boolean to indicate whether checkbox is checked or not. Can be object literal</span>
<span class="c"> * {checked:bBoolean, label:sLabel}. Other forms of oData require a custom</span>
<span class="c"> * formatter.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">formatCheckbox</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">bChecked</span> <span class="o">=</span> <span class="nx">oData</span><span class="o">;</span>
<span class="nx">bChecked</span> <span class="o">=</span> <span class="o">(</span><span class="nx">bChecked</span><span class="o">)</span> <span class="o">?</span> <span class="s2">&quot; checked=\&quot;checked\&quot;&quot;</span> <span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&quot;&lt;input type=\&quot;checkbox\&quot;&quot;</span> <span class="o">+</span> <span class="nx">bChecked</span> <span class="o">+</span>
<span class="s2">&quot; class=\&quot;&quot;</span> <span class="o">+</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_CHECKBOX</span> <span class="o">+</span> <span class="s2">&quot;\&quot; /&gt;&quot;</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats currency. Default unit is USD.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatCurrency</span>
<span class="c"> * @param el {HTMLElement} The element to format with markup.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oData {Number} Data value for the cell.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">formatCurrency</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">util</span><span class="o">.</span><span class="nb">Number</span><span class="o">.</span><span class="nx">format</span><span class="o">(</span><span class="nx">oData</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">currencyOptions</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;currencyOptions&quot;</span><span class="o">));</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats JavaScript Dates.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatDate</span>
<span class="c"> * @param el {HTMLElement} The element to format with markup.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oData {Object} Data value for the cell, or null.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">formatDate</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oConfig</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">dateOptions</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;dateOptions&quot;</span><span class="o">);</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">util</span><span class="o">.</span><span class="nb">Date</span><span class="o">.</span><span class="nx">format</span><span class="o">(</span><span class="nx">oData</span><span class="o">,</span> <span class="nx">oConfig</span><span class="o">,</span> <span class="nx">oConfig</span><span class="o">.</span><span class="nx">locale</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats SELECT elements.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatDropdown</span>
<span class="c"> * @param el {HTMLElement} The element to format with markup.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oData {Object} Data value for the cell, or null.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">formatDropdown</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">selectedValue</span> <span class="o">=</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">oData</span><span class="o">))</span> <span class="o">?</span> <span class="nx">oData</span> <span class="o">:</span> <span class="nx">oRecord</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">field</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">options</span> <span class="o">=</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isArray</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">dropdownOptions</span><span class="o">))</span> <span class="o">?</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">dropdownOptions</span> <span class="o">:</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">selectEl</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">collection</span> <span class="o">=</span> <span class="nx">el</span><span class="o">.</span><span class="nx">getElementsByTagName</span><span class="o">(</span><span class="s2">&quot;select&quot;</span><span class="o">);</span>
<span class="c">// Create the form element only once, so we can attach the onChange listener</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">collection</span><span class="o">.</span><span class="nx">length</span> <span class="o">===</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Create SELECT element</span>
<span class="c"></span> <span class="nx">selectEl</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;select&quot;</span><span class="o">);</span>
<span class="nx">selectEl</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DROPDOWN</span><span class="o">;</span>
<span class="nx">selectEl</span> <span class="o">=</span> <span class="nx">el</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nx">selectEl</span><span class="o">);</span>
<span class="c">// Add event listener</span>
<span class="c"></span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">selectEl</span><span class="o">,</span><span class="s2">&quot;change&quot;</span><span class="o">,</span><span class="k">this</span><span class="o">.</span><span class="nx">_onDropdownChange</span><span class="o">,</span><span class="k">this</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">selectEl</span> <span class="o">=</span> <span class="nx">collection</span><span class="o">[</span><span class="m">0</span><span class="o">];</span>
<span class="c">// Update the form element</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">selectEl</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Clear out previous options</span>
<span class="c"></span> <span class="nx">selectEl</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="c">// We have options to populate</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">options</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Create OPTION elements</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">options</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">option</span> <span class="o">=</span> <span class="nx">options</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">var</span> <span class="nx">optionEl</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;option&quot;</span><span class="o">);</span>
<span class="nx">optionEl</span><span class="o">.</span><span class="nx">value</span> <span class="o">=</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">option</span><span class="o">.</span><span class="nx">value</span><span class="o">))</span> <span class="o">?</span>
<span class="nx">option</span><span class="o">.</span><span class="nx">value</span> <span class="o">:</span> <span class="nx">option</span><span class="o">;</span>
<span class="nx">optionEl</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">option</span><span class="o">.</span><span class="nx">text</span><span class="o">))</span> <span class="o">?</span>
<span class="nx">option</span><span class="o">.</span><span class="nx">text</span> <span class="o">:</span> <span class="nx">option</span><span class="o">;</span>
<span class="nx">optionEl</span> <span class="o">=</span> <span class="nx">selectEl</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nx">optionEl</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">optionEl</span><span class="o">.</span><span class="nx">value</span> <span class="o">==</span> <span class="nx">selectedValue</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">optionEl</span><span class="o">.</span><span class="nx">selected</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Selected value is our only option</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">selectEl</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&quot;&lt;option selected value=\&quot;&quot;</span> <span class="o">+</span> <span class="nx">selectedValue</span> <span class="o">+</span> <span class="s2">&quot;\&quot;&gt;&quot;</span> <span class="o">+</span> <span class="nx">selectedValue</span> <span class="o">+</span> <span class="s2">&quot;&lt;/option&gt;&quot;</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">oData</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oData</span> <span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats emails.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatEmail</span>
<span class="c"> * @param el {HTMLElement} The element to format with markup.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oData {Object} Data value for the cell, or null.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">formatEmail</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">oData</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&quot;&lt;a href=\&quot;mailto:&quot;</span> <span class="o">+</span> <span class="nx">oData</span> <span class="o">+</span> <span class="s2">&quot;\&quot;&gt;&quot;</span> <span class="o">+</span> <span class="nx">oData</span> <span class="o">+</span> <span class="s2">&quot;&lt;/a&gt;&quot;</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">oData</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oData</span> <span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats links.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatLink</span>
<span class="c"> * @param el {HTMLElement} The element to format with markup.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oData {Object} Data value for the cell, or null.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">formatLink</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">oData</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&quot;&lt;a href=\&quot;&quot;</span> <span class="o">+</span> <span class="nx">oData</span> <span class="o">+</span> <span class="s2">&quot;\&quot;&gt;&quot;</span> <span class="o">+</span> <span class="nx">oData</span> <span class="o">+</span> <span class="s2">&quot;&lt;/a&gt;&quot;</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">oData</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oData</span> <span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats numbers.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatNumber</span>
<span class="c"> * @param el {HTMLElement} The element to format with markup.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oData {Object} Data value for the cell, or null.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">formatNumber</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">util</span><span class="o">.</span><span class="nb">Number</span><span class="o">.</span><span class="nx">format</span><span class="o">(</span><span class="nx">oData</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">numberOptions</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;numberOptions&quot;</span><span class="o">));</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats INPUT TYPE=RADIO elements.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatRadio</span>
<span class="c"> * @param el {HTMLElement} The element to format with markup.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oData {Object} (Optional) Data value for the cell.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">formatRadio</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">bChecked</span> <span class="o">=</span> <span class="nx">oData</span><span class="o">;</span>
<span class="nx">bChecked</span> <span class="o">=</span> <span class="o">(</span><span class="nx">bChecked</span><span class="o">)</span> <span class="o">?</span> <span class="s2">&quot; checked=\&quot;checked\&quot;&quot;</span> <span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&quot;&lt;input type=\&quot;radio\&quot;&quot;</span> <span class="o">+</span> <span class="nx">bChecked</span> <span class="o">+</span>
<span class="s2">&quot; name=\&quot;&quot;</span><span class="o">+</span><span class="k">this</span><span class="o">.</span><span class="nx">getId</span><span class="o">()+</span><span class="s2">&quot;-col-&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getSanitizedKey</span><span class="o">()</span> <span class="o">+</span> <span class="s2">&quot;\&quot;&quot;</span> <span class="o">+</span>
<span class="s2">&quot; class=\&quot;&quot;</span> <span class="o">+</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_RADIO</span><span class="o">+</span> <span class="s2">&quot;\&quot; /&gt;&quot;</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats text strings.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatText</span>
<span class="c"> * @param el {HTMLElement} The element to format with markup.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oData {Object} (Optional) Data value for the cell.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">formatText</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">value</span> <span class="o">=</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">field</span><span class="o">)))</span> <span class="o">?</span>
<span class="nx">oRecord</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">field</span><span class="o">)</span> <span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="c">//TODO: move to util function</span>
<span class="c"></span> <span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">value</span><span class="o">.</span><span class="nx">toString</span><span class="o">().</span><span class="nx">replace</span><span class="o">(</span><span class="sr">/&amp;/g</span><span class="o">,</span> <span class="s2">&quot;&amp;#38;&quot;</span><span class="o">).</span><span class="nx">replace</span><span class="o">(</span><span class="sr">/&lt;/g</span><span class="o">,</span> <span class="s2">&quot;&amp;#60;&quot;</span><span class="o">).</span><span class="nx">replace</span><span class="o">(</span><span class="sr">/&gt;/g</span><span class="o">,</span> <span class="s2">&quot;&amp;#62;&quot;</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats TEXTAREA elements.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatTextarea</span>
<span class="c"> * @param el {HTMLElement} The element to format with markup.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oData {Object} (Optional) Data value for the cell.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">formatTextarea</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">value</span> <span class="o">=</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">field</span><span class="o">)))</span> <span class="o">?</span>
<span class="nx">oRecord</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">field</span><span class="o">)</span> <span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">markup</span> <span class="o">=</span> <span class="s2">&quot;&lt;textarea&gt;&quot;</span> <span class="o">+</span> <span class="nx">value</span> <span class="o">+</span> <span class="s2">&quot;&lt;/textarea&gt;&quot;</span><span class="o">;</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">markup</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats INPUT TYPE=TEXT elements.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatTextbox</span>
<span class="c"> * @param el {HTMLElement} The element to format with markup.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oData {Object} (Optional) Data value for the cell.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">formatTextbox</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">value</span> <span class="o">=</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">field</span><span class="o">)))</span> <span class="o">?</span>
<span class="nx">oRecord</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">field</span><span class="o">)</span> <span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">markup</span> <span class="o">=</span> <span class="s2">&quot;&lt;input type=\&quot;text\&quot; value=\&quot;&quot;</span> <span class="o">+</span> <span class="nx">value</span> <span class="o">+</span> <span class="s2">&quot;\&quot; /&gt;&quot;</span><span class="o">;</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">markup</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Default cell formatter</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatDefault</span>
<span class="c"> * @param el {HTMLElement} The element to format with markup.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oData {Object} (Optional) Data value for the cell.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">formatDefault</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">oData</span> <span class="o">===</span> <span class="kc">undefined</span> <span class="o">||</span>
<span class="nx">oData</span> <span class="o">===</span> <span class="kc">null</span> <span class="o">||</span>
<span class="o">(</span><span class="k">typeof</span> <span class="nx">oData</span> <span class="o">===</span> <span class="s1">&#39;number&#39;</span> <span class="o">&amp;&amp;</span> <span class="nb">isNaN</span><span class="o">(</span><span class="nx">oData</span><span class="o">))</span> <span class="o">?</span>
<span class="s2">&quot;&amp;#160;&quot;</span> <span class="o">:</span> <span class="nx">oData</span><span class="o">.</span><span class="nx">toString</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Validates data value to type Number, doing type conversion as</span>
<span class="c"> * necessary. A valid Number value is return, else null is returned</span>
<span class="c"> * if input value does not validate.</span>
<span class="c"> *</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.validateNumber</span>
<span class="c"> * @param oData {Object} Data to validate.</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">validateNumber</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//Convert to number</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">number</span> <span class="o">=</span> <span class="nx">oData</span> <span class="o">*</span> <span class="m">1</span><span class="o">;</span>
<span class="c">// Validate</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">number</span><span class="o">))</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">number</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not validate data &quot;</span> <span class="o">+</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">dump</span><span class="o">(</span><span class="nx">oData</span><span class="o">)</span> <span class="o">+</span> <span class="s2">&quot; to type Number&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">undefined</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="c">// Done in separate step so referenced functions are defined.</span>
<span class="c">/**</span>
<span class="c"> * Cell formatting functions.</span>
<span class="c"> * @property DataTable.Formatter</span>
<span class="c"> * @type Object</span>
<span class="c"> * @static</span>
<span class="c"> */</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">Formatter</span> <span class="o">=</span> <span class="o">{</span>
<span class="nx">button</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">formatButton</span><span class="o">,</span>
<span class="nx">checkbox</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">formatCheckbox</span><span class="o">,</span>
<span class="nx">currency</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">formatCurrency</span><span class="o">,</span>
<span class="s2">&quot;date&quot;</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">formatDate</span><span class="o">,</span>
<span class="nx">dropdown</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">formatDropdown</span><span class="o">,</span>
<span class="nx">email</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">formatEmail</span><span class="o">,</span>
<span class="nx">link</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">formatLink</span><span class="o">,</span>
<span class="s2">&quot;number&quot;</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">formatNumber</span><span class="o">,</span>
<span class="nx">radio</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">formatRadio</span><span class="o">,</span>
<span class="nx">text</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">formatText</span><span class="o">,</span>
<span class="nx">textarea</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">formatTextarea</span><span class="o">,</span>
<span class="nx">textbox</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">formatTextbox</span><span class="o">,</span>
<span class="nx">defaultFormatter</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">formatDefault</span>
<span class="o">};</span>
<span class="nx">lang</span><span class="o">.</span><span class="nx">extend</span><span class="o">(</span><span class="nx">DT</span><span class="o">,</span> <span class="nx">util</span><span class="o">.</span><span class="nx">Element</span><span class="o">,</span> <span class="o">{</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c">//</span>
<span class="c">// Superclass methods</span>
<span class="c">//</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Implementation of Element&#39;s abstract method. Sets up config values.</span>
<span class="c"> *</span>
<span class="c"> * @method initAttributes</span>
<span class="c"> * @param oConfigs {Object} (Optional) Object literal definition of configuration values.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">initAttributes</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oConfigs</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oConfigs</span> <span class="o">=</span> <span class="nx">oConfigs</span> <span class="o">||</span> <span class="o">{};</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">superclass</span><span class="o">.</span><span class="nx">initAttributes</span><span class="o">.</span><span class="nx">call</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="nx">oConfigs</span><span class="o">);</span>
<span class="c">/**</span>
<span class="c"> * @attribute summary</span>
<span class="c"> * @description Value for the SUMMARY attribute.</span>
<span class="c"> * @type String</span>
<span class="c"> * @default &quot;&quot; </span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;summary&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="o">,</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">,</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">sSummary</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span><span class="o">.</span><span class="nx">summary</span> <span class="o">=</span> <span class="nx">sSummary</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute selectionMode</span>
<span class="c"> * @description Specifies row or cell selection mode. Accepts the following strings:</span>
<span class="c"> * &lt;dl&gt;</span>
<span class="c"> * &lt;dt&gt;&quot;standard&quot;&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;Standard row selection with support for modifier keys to enable</span>
<span class="c"> * multiple selections.&lt;/dd&gt;</span>
<span class="c"> *</span>
<span class="c"> * &lt;dt&gt;&quot;single&quot;&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;Row selection with modifier keys disabled to not allow</span>
<span class="c"> * multiple selections.&lt;/dd&gt;</span>
<span class="c"> *</span>
<span class="c"> * &lt;dt&gt;&quot;singlecell&quot;&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;Cell selection with modifier keys disabled to not allow</span>
<span class="c"> * multiple selections.&lt;/dd&gt;</span>
<span class="c"> *</span>
<span class="c"> * &lt;dt&gt;&quot;cellblock&quot;&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;Cell selection with support for modifier keys to enable multiple</span>
<span class="c"> * selections in a block-fashion, like a spreadsheet.&lt;/dd&gt;</span>
<span class="c"> *</span>
<span class="c"> * &lt;dt&gt;&quot;cellrange&quot;&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;Cell selection with support for modifier keys to enable multiple</span>
<span class="c"> * selections in a range-fashion, like a calendar.&lt;/dd&gt;</span>
<span class="c"> * &lt;/dl&gt;</span>
<span class="c"> *</span>
<span class="c"> * @default &quot;standard&quot;</span>
<span class="c"> * @type String</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;selectionMode&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="s2">&quot;standard&quot;</span><span class="o">,</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute sortedBy</span>
<span class="c"> * @description Object literal provides metadata for initial sort values if</span>
<span class="c"> * data will arrive pre-sorted:</span>
<span class="c"> * &lt;dl&gt;</span>
<span class="c"> * &lt;dt&gt;sortedBy.key&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;{String} Key of sorted Column&lt;/dd&gt;</span>
<span class="c"> * &lt;dt&gt;sortedBy.dir&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;{String} Initial sort direction, either YAHOO.widget.DataTable.CLASS_ASC or YAHOO.widget.DataTable.CLASS_DESC&lt;/dd&gt;</span>
<span class="c"> * &lt;/dl&gt;</span>
<span class="c"> * @type Object | null</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;sortedBy&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">// TODO: accepted array for nested sorts</span>
<span class="c"></span> <span class="nx">validator</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oNewSortedBy</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oNewSortedBy</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isObject</span><span class="o">(</span><span class="nx">oNewSortedBy</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="nx">oNewSortedBy</span><span class="o">.</span><span class="nx">key</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">return</span> <span class="o">(</span><span class="nx">oNewSortedBy</span> <span class="o">===</span> <span class="kc">null</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oNewSortedBy</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Stash the previous value</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oOldSortedBy</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;sortedBy&quot;</span><span class="o">);</span>
<span class="c">// Workaround for bug 1827195</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_configs</span><span class="o">.</span><span class="nx">sortedBy</span><span class="o">.</span><span class="nx">value</span> <span class="o">=</span> <span class="nx">oNewSortedBy</span><span class="o">;</span>
<span class="c">// Remove ASC/DESC from TH</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oOldColumn</span><span class="o">,</span>
<span class="nx">nOldColumnKeyIndex</span><span class="o">,</span>
<span class="nx">oNewColumn</span><span class="o">,</span>
<span class="nx">nNewColumnKeyIndex</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oOldSortedBy</span> <span class="o">&amp;&amp;</span> <span class="nx">oOldSortedBy</span><span class="o">.</span><span class="nx">key</span> <span class="o">&amp;&amp;</span> <span class="nx">oOldSortedBy</span><span class="o">.</span><span class="nx">dir</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oOldColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">oOldSortedBy</span><span class="o">.</span><span class="nx">key</span><span class="o">);</span>
<span class="nx">nOldColumnKeyIndex</span> <span class="o">=</span> <span class="nx">oOldColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="c">// Remove previous UI from THEAD</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elOldTh</span> <span class="o">=</span> <span class="nx">oOldColumn</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">();</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">elOldTh</span><span class="o">,</span> <span class="nx">oOldSortedBy</span><span class="o">.</span><span class="nx">dir</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">formatTheadCell</span><span class="o">(</span><span class="nx">oOldColumn</span><span class="o">.</span><span class="nx">getThLinerEl</span><span class="o">().</span><span class="nx">firstChild</span><span class="o">,</span> <span class="nx">oOldColumn</span><span class="o">,</span> <span class="nx">oNewSortedBy</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oNewSortedBy</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oNewColumn</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oNewSortedBy</span><span class="o">.</span><span class="nx">column</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oNewSortedBy</span><span class="o">.</span><span class="nx">column</span> <span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">oNewSortedBy</span><span class="o">.</span><span class="nx">key</span><span class="o">);</span>
<span class="nx">nNewColumnKeyIndex</span> <span class="o">=</span> <span class="nx">oNewColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="c">// Update THEAD with new UI</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elNewTh</span> <span class="o">=</span> <span class="nx">oNewColumn</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">();</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oNewSortedBy</span><span class="o">.</span><span class="nx">dir</span> <span class="o">&amp;&amp;</span> <span class="o">((</span><span class="nx">oNewSortedBy</span><span class="o">.</span><span class="nx">dir</span> <span class="o">==</span> <span class="s2">&quot;asc&quot;</span><span class="o">)</span> <span class="o">||</span> <span class="o">(</span><span class="nx">oNewSortedBy</span><span class="o">.</span><span class="nx">dir</span> <span class="o">==</span> <span class="s2">&quot;desc&quot;</span><span class="o">)))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">newClass</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oNewSortedBy</span><span class="o">.</span><span class="nx">dir</span> <span class="o">==</span> <span class="s2">&quot;desc&quot;</span><span class="o">)</span> <span class="o">?</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DESC</span> <span class="o">:</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ASC</span><span class="o">;</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elNewTh</span><span class="o">,</span> <span class="nx">newClass</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">sortClass</span> <span class="o">=</span> <span class="nx">oNewSortedBy</span><span class="o">.</span><span class="nx">dir</span> <span class="o">||</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ASC</span><span class="o">;</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elNewTh</span><span class="o">,</span> <span class="nx">sortClass</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">formatTheadCell</span><span class="o">(</span><span class="nx">oNewColumn</span><span class="o">.</span><span class="nx">getThLinerEl</span><span class="o">().</span><span class="nx">firstChild</span><span class="o">,</span> <span class="nx">oNewColumn</span><span class="o">,</span> <span class="nx">oNewSortedBy</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Update TBODY UI</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">,</span>
<span class="nx">allCells</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="nx">allCells</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">childNodes</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">allCells</span><span class="o">[</span><span class="nx">nOldColumnKeyIndex</span><span class="o">])</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">allCells</span><span class="o">[</span><span class="nx">nOldColumnKeyIndex</span><span class="o">],</span> <span class="nx">oOldSortedBy</span><span class="o">.</span><span class="nx">dir</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">allCells</span><span class="o">[</span><span class="nx">nNewColumnKeyIndex</span><span class="o">])</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">allCells</span><span class="o">[</span><span class="nx">nNewColumnKeyIndex</span><span class="o">],</span> <span class="nx">oNewSortedBy</span><span class="o">.</span><span class="nx">dir</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_clearTrTemplateEl</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute paginator</span>
<span class="c"> * @description An instance of YAHOO.widget.Paginator.</span>
<span class="c"> * @default null</span>
<span class="c"> * @type {Object|YAHOO.widget.Paginator}</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;paginator&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="nx">validator</span> <span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">val</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">val</span> <span class="o">===</span> <span class="kc">null</span> <span class="o">||</span> <span class="nx">val</span> <span class="k">instanceof</span> <span class="nx">widget</span><span class="o">.</span><span class="nx">Paginator</span><span class="o">;</span>
<span class="o">},</span>
<span class="nx">method</span> <span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span> <span class="k">this</span><span class="o">.</span><span class="nx">_updatePaginator</span><span class="o">.</span><span class="nx">apply</span><span class="o">(</span><span class="k">this</span><span class="o">,</span><span class="nx">arguments</span><span class="o">);</span> <span class="o">}</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute caption</span>
<span class="c"> * @description Value for the CAPTION element. NB: Not supported in</span>
<span class="c"> * ScrollingDataTable. </span>
<span class="c"> * @type String</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;caption&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">,</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">sCaption</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_initCaptionEl</span><span class="o">(</span><span class="nx">sCaption</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute draggableColumns</span>
<span class="c"> * @description True if Columns are draggable to reorder, false otherwise.</span>
<span class="c"> * The Drag &amp; Drop Utility is required to enable this feature. Only top-level</span>
<span class="c"> * and non-nested Columns are draggable. Write once.</span>
<span class="c"> * @default false</span>
<span class="c"> * @type Boolean</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;draggableColumns&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="kc">false</span><span class="o">,</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isBoolean</span><span class="o">,</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oParam</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oParam</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_initDraggableColumns</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_destroyDraggableColumns</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute renderLoopSize </span>
<span class="c"> * @description A value greater than 0 enables DOM rendering of rows to be</span>
<span class="c"> * executed from a non-blocking timeout queue and sets how many rows to be</span>
<span class="c"> * rendered per timeout. Recommended for very large data sets. </span>
<span class="c"> * @type Number </span>
<span class="c"> * @default 0 </span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;renderLoopSize&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="m">0</span><span class="o">,</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute formatRow</span>
<span class="c"> * @description A function that accepts a TR element and its associated Record</span>
<span class="c"> * for custom formatting. The function must return TRUE in order to automatically</span>
<span class="c"> * continue formatting of child TD elements, else TD elements will not be</span>
<span class="c"> * automatically formatted.</span>
<span class="c"> * @type function</span>
<span class="c"> * @default null</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;formatRow&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isFunction</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute generateRequest</span>
<span class="c"> * @description A function that converts an object literal of desired DataTable</span>
<span class="c"> * states into a request value which is then passed to the DataSource&#39;s</span>
<span class="c"> * sendRequest method in order to retrieve data for those states. This</span>
<span class="c"> * function is passed an object literal of state data and a reference to the</span>
<span class="c"> * DataTable instance:</span>
<span class="c"> * </span>
<span class="c"> * &lt;dl&gt;</span>
<span class="c"> * &lt;dt&gt;pagination&lt;dt&gt;</span>
<span class="c"> * &lt;dd&gt; </span>
<span class="c"> * &lt;dt&gt;offsetRecord&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;{Number} Index of the first Record of the desired page&lt;/dd&gt;</span>
<span class="c"> * &lt;dt&gt;rowsPerPage&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;{Number} Number of rows per page&lt;/dd&gt;</span>
<span class="c"> * &lt;/dd&gt;</span>
<span class="c"> * &lt;dt&gt;sortedBy&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt; </span>
<span class="c"> * &lt;dt&gt;key&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;{String} Key of sorted Column&lt;/dd&gt;</span>
<span class="c"> * &lt;dt&gt;dir&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;{String} Sort direction, either YAHOO.widget.DataTable.CLASS_ASC or YAHOO.widget.DataTable.CLASS_DESC&lt;/dd&gt;</span>
<span class="c"> * &lt;/dd&gt;</span>
<span class="c"> * &lt;dt&gt;self&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;The DataTable instance&lt;/dd&gt;</span>
<span class="c"> * &lt;/dl&gt;</span>
<span class="c"> * </span>
<span class="c"> * and by default returns a String of syntax:</span>
<span class="c"> * &quot;sort={sortColumn}&amp;dir={sortDir}&amp;startIndex={pageStartIndex}&amp;results={rowsPerPage}&quot;</span>
<span class="c"> * @type function</span>
<span class="c"> * @default HTMLFunction</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;generateRequest&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oState</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Set defaults</span>
<span class="c"></span> <span class="nx">oState</span> <span class="o">=</span> <span class="nx">oState</span> <span class="o">||</span> <span class="o">{</span><span class="nx">pagination</span><span class="o">:</span><span class="kc">null</span><span class="o">,</span> <span class="nx">sortedBy</span><span class="o">:</span><span class="kc">null</span><span class="o">};</span>
<span class="k">var</span> <span class="nx">sort</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oState</span><span class="o">.</span><span class="nx">sortedBy</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oState</span><span class="o">.</span><span class="nx">sortedBy</span><span class="o">.</span><span class="nx">key</span> <span class="o">:</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">getColumnSet</span><span class="o">().</span><span class="nx">keys</span><span class="o">[</span><span class="m">0</span><span class="o">].</span><span class="nx">getKey</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">dir</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oState</span><span class="o">.</span><span class="nx">sortedBy</span> <span class="o">&amp;&amp;</span> <span class="nx">oState</span><span class="o">.</span><span class="nx">sortedBy</span><span class="o">.</span><span class="nx">dir</span> <span class="o">===</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DESC</span><span class="o">)</span> <span class="o">?</span> <span class="s2">&quot;desc&quot;</span> <span class="o">:</span> <span class="s2">&quot;asc&quot;</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">startIndex</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oState</span><span class="o">.</span><span class="nx">pagination</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oState</span><span class="o">.</span><span class="nx">pagination</span><span class="o">.</span><span class="nx">recordOffset</span> <span class="o">:</span> <span class="m">0</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">results</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oState</span><span class="o">.</span><span class="nx">pagination</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oState</span><span class="o">.</span><span class="nx">pagination</span><span class="o">.</span><span class="nx">rowsPerPage</span> <span class="o">:</span> <span class="kc">null</span><span class="o">;</span>
<span class="c">// Build the request</span>
<span class="c"></span> <span class="k">return</span> <span class="s2">&quot;sort=&quot;</span> <span class="o">+</span> <span class="nx">sort</span> <span class="o">+</span>
<span class="s2">&quot;&amp;dir=&quot;</span> <span class="o">+</span> <span class="nx">dir</span> <span class="o">+</span>
<span class="s2">&quot;&amp;startIndex=&quot;</span> <span class="o">+</span> <span class="nx">startIndex</span> <span class="o">+</span>
<span class="o">((</span><span class="nx">results</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">?</span> <span class="s2">&quot;&amp;results=&quot;</span> <span class="o">+</span> <span class="nx">results</span> <span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="o">);</span>
<span class="o">},</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isFunction</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute initialRequest</span>
<span class="c"> * @description Defines the initial request that gets sent to the DataSource</span>
<span class="c"> * during initialization. Value is ignored if initialLoad is set to any value</span>
<span class="c"> * other than true. </span>
<span class="c"> * @type MIXED</span>
<span class="c"> * @default null</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;initialRequest&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="kc">null</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute initialLoad</span>
<span class="c"> * @description Determines whether or not to load data at instantiation. By</span>
<span class="c"> * default, will trigger a sendRequest() to the DataSource and pass in the</span>
<span class="c"> * request defined by initialRequest. If set to false, data will not load</span>
<span class="c"> * at instantiation. Alternatively, implementers who wish to work with a </span>
<span class="c"> * custom payload may pass in an object literal with the following values:</span>
<span class="c"> * </span>
<span class="c"> * &lt;dl&gt;</span>
<span class="c"> * &lt;dt&gt;request (MIXED)&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;Request value.&lt;/dd&gt;</span>
<span class="c"> *</span>
<span class="c"> * &lt;dt&gt;argument (MIXED)&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;Custom data that will be passed through to the callback function.&lt;/dd&gt;</span>
<span class="c"> * &lt;/dl&gt;</span>
<span class="c"> *</span>
<span class="c"> * </span>
<span class="c"> * @type Boolean | Object</span>
<span class="c"> * @default true</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;initialLoad&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="kc">true</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute dynamicData</span>
<span class="c"> * @description If true, sorting and pagination are relegated to the DataSource</span>
<span class="c"> * for handling, using the request returned by the &quot;generateRequest&quot; function.</span>
<span class="c"> * Each new DataSource response blows away all previous Records. False by default, so </span>
<span class="c"> * sorting and pagination will be handled directly on the client side, without</span>
<span class="c"> * causing any new requests for data from the DataSource.</span>
<span class="c"> * @type Boolean</span>
<span class="c"> * @default false</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;dynamicData&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="kc">false</span><span class="o">,</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isBoolean</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute MSG_EMPTY </span>
<span class="c"> * @description Message to display if DataTable has no data. </span>
<span class="c"> * @type String </span>
<span class="c"> * @default &quot;No records found.&quot; </span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;MSG_EMPTY&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="s2">&quot;No records found.&quot;</span><span class="o">,</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute MSG_LOADING </span>
<span class="c"> * @description Message to display while DataTable is loading data.</span>
<span class="c"> * @type String </span>
<span class="c"> * @default &quot;Loading...&quot; </span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;MSG_LOADING&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="s2">&quot;Loading...&quot;</span><span class="o">,</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute MSG_ERROR </span>
<span class="c"> * @description Message to display while DataTable has data error.</span>
<span class="c"> * @type String </span>
<span class="c"> * @default &quot;Data error.&quot; </span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;MSG_ERROR&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="s2">&quot;Data error.&quot;</span><span class="o">,</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute MSG_SORTASC </span>
<span class="c"> * @description Message to display in tooltip to sort Column in ascending order.</span>
<span class="c"> * @type String </span>
<span class="c"> * @default &quot;Click to sort ascending&quot; </span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;MSG_SORTASC&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="s2">&quot;Click to sort ascending&quot;</span><span class="o">,</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">,</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">sParam</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">allKeys</span><span class="o">=</span><span class="k">this</span><span class="o">.</span><span class="nx">getColumnSet</span><span class="o">().</span><span class="nx">keys</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="nx">allKeys</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">allKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">sortable</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumnSortDir</span><span class="o">(</span><span class="nx">allKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">])</span> <span class="o">===</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ASC</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">allKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">_elThLabel</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">.</span><span class="nx">title</span> <span class="o">=</span> <span class="nx">sParam</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute MSG_SORTDESC </span>
<span class="c"> * @description Message to display in tooltip to sort Column in descending order.</span>
<span class="c"> * @type String </span>
<span class="c"> * @default &quot;Click to sort descending&quot; </span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;MSG_SORTDESC&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="s2">&quot;Click to sort descending&quot;</span><span class="o">,</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">,</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">sParam</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">allKeys</span><span class="o">=</span><span class="k">this</span><span class="o">.</span><span class="nx">getColumnSet</span><span class="o">().</span><span class="nx">keys</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="nx">allKeys</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">allKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">sortable</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumnSortDir</span><span class="o">(</span><span class="nx">allKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">])</span> <span class="o">===</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DESC</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">allKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">_elThLabel</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">.</span><span class="nx">title</span> <span class="o">=</span> <span class="nx">sParam</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * @attribute currencySymbol</span>
<span class="c"> * @deprecated</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;currencySymbol&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="s2">&quot;$&quot;</span><span class="o">,</span>
<span class="nx">validator</span><span class="o">:</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * Default config passed to YAHOO.util.Number.format() by the &#39;currency&#39; Column formatter.</span>
<span class="c"> * @attribute currencyOptions</span>
<span class="c"> * @type Object</span>
<span class="c"> * @default {prefix: $, decimalPlaces:2, decimalSeparator:&quot;.&quot;, thousandsSeparator:&quot;,&quot;}</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;currencyOptions&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="o">{</span>
<span class="nx">prefix</span><span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;currencySymbol&quot;</span><span class="o">),</span> <span class="c">// TODO: deprecate currencySymbol</span>
<span class="c"></span> <span class="nx">decimalPlaces</span><span class="o">:</span><span class="m">2</span><span class="o">,</span>
<span class="nx">decimalSeparator</span><span class="o">:</span><span class="s2">&quot;.&quot;</span><span class="o">,</span>
<span class="nx">thousandsSeparator</span><span class="o">:</span><span class="s2">&quot;,&quot;</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * Default config passed to YAHOO.util.Date.format() by the &#39;date&#39; Column formatter.</span>
<span class="c"> * @attribute dateOptions</span>
<span class="c"> * @type Object</span>
<span class="c"> * @default {format:&quot;%m/%d/%Y&quot;, locale:&quot;en&quot;}</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;dateOptions&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="o">{</span><span class="nx">format</span><span class="o">:</span><span class="s2">&quot;%m/%d/%Y&quot;</span><span class="o">,</span> <span class="nx">locale</span><span class="o">:</span><span class="s2">&quot;en&quot;</span><span class="o">}</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * Default config passed to YAHOO.util.Number.format() by the &#39;number&#39; Column formatter.</span>
<span class="c"> * @attribute numberOptions</span>
<span class="c"> * @type Object</span>
<span class="c"> * @default {decimalPlaces:0, thousandsSeparator:&quot;,&quot;}</span>
<span class="c"> */</span>
<span class="k">this</span><span class="o">.</span><span class="nx">setAttributeConfig</span><span class="o">(</span><span class="s2">&quot;numberOptions&quot;</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="o">{</span>
<span class="nx">decimalPlaces</span><span class="o">:</span><span class="m">0</span><span class="o">,</span>
<span class="nx">thousandsSeparator</span><span class="o">:</span><span class="s2">&quot;,&quot;</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="o">},</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c">//</span>
<span class="c">// Private member variables</span>
<span class="c">//</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * True if instance is initialized, so as to fire the initEvent after render.</span>
<span class="c"> *</span>
<span class="c"> * @property _bInit</span>
<span class="c"> * @type Boolean</span>
<span class="c"> * @default true</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_bInit</span> <span class="o">:</span> <span class="kc">true</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Index assigned to instance.</span>
<span class="c"> *</span>
<span class="c"> * @property _nIndex</span>
<span class="c"> * @type Number</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_nIndex</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Counter for IDs assigned to TR elements.</span>
<span class="c"> *</span>
<span class="c"> * @property _nTrCount</span>
<span class="c"> * @type Number</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_nTrCount</span> <span class="o">:</span> <span class="m">0</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Counter for IDs assigned to TD elements.</span>
<span class="c"> *</span>
<span class="c"> * @property _nTdCount</span>
<span class="c"> * @type Number</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_nTdCount</span> <span class="o">:</span> <span class="m">0</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Unique id assigned to instance &quot;yui-dtN&quot;, useful prefix for generating unique</span>
<span class="c"> * DOM ID strings and log messages.</span>
<span class="c"> *</span>
<span class="c"> * @property _sId</span>
<span class="c"> * @type String</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_sId</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Render chain.</span>
<span class="c"> *</span>
<span class="c"> * @property _oChainRender</span>
<span class="c"> * @type YAHOO.util.Chain</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_oChainRender</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * DOM reference to the container element for the DataTable instance into which</span>
<span class="c"> * all other elements get created.</span>
<span class="c"> *</span>
<span class="c"> * @property _elContainer</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_elContainer</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * DOM reference to the mask element for the DataTable instance which disables it.</span>
<span class="c"> *</span>
<span class="c"> * @property _elMask</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_elMask</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * DOM reference to the TABLE element for the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @property _elTable</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_elTable</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * DOM reference to the CAPTION element for the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @property _elCaption</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_elCaption</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * DOM reference to the COLGROUP element for the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @property _elColgroup</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_elColgroup</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * DOM reference to the THEAD element for the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @property _elThead</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_elThead</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * DOM reference to the primary TBODY element for the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @property _elTbody</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_elTbody</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * DOM reference to the secondary TBODY element used to display DataTable messages.</span>
<span class="c"> *</span>
<span class="c"> * @property _elMsgTbody</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_elMsgTbody</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * DOM reference to the secondary TBODY element&#39;s single TR element used to display DataTable messages.</span>
<span class="c"> *</span>
<span class="c"> * @property _elMsgTr</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_elMsgTr</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * DOM reference to the secondary TBODY element&#39;s single TD element used to display DataTable messages.</span>
<span class="c"> *</span>
<span class="c"> * @property _elMsgTd</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_elMsgTd</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * DataSource instance for the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @property _oDataSource</span>
<span class="c"> * @type YAHOO.util.DataSource</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_oDataSource</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * ColumnSet instance for the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @property _oColumnSet</span>
<span class="c"> * @type YAHOO.widget.ColumnSet</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_oColumnSet</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * RecordSet instance for the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @property _oRecordSet</span>
<span class="c"> * @type YAHOO.widget.RecordSet</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_oRecordSet</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * The active CellEditor instance for the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @property _oCellEditor</span>
<span class="c"> * @type YAHOO.widget.CellEditor</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_oCellEditor</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * ID string of first TR element of the current DataTable page.</span>
<span class="c"> *</span>
<span class="c"> * @property _sFirstTrId</span>
<span class="c"> * @type String</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_sFirstTrId</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * ID string of the last TR element of the current DataTable page.</span>
<span class="c"> *</span>
<span class="c"> * @property _sLastTrId</span>
<span class="c"> * @type String</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_sLastTrId</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Template row to create all new rows from.</span>
<span class="c"> * @property _elTrTemplate</span>
<span class="c"> * @type {HTMLElement}</span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_elTrTemplate</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Sparse array of custom functions to set column widths for browsers that don&#39;t</span>
<span class="c"> * support dynamic CSS rules. Functions are added at the index representing</span>
<span class="c"> * the number of rows they update.</span>
<span class="c"> *</span>
<span class="c"> * @property _aDynFunctions</span>
<span class="c"> * @type Array</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_aDynFunctions</span> <span class="o">:</span> <span class="o">[],</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c">//</span>
<span class="c">// Private methods</span>
<span class="c">//</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Clears browser text selection. Useful to call on rowSelectEvent or</span>
<span class="c"> * cellSelectEvent to prevent clicks or dblclicks from selecting text in the</span>
<span class="c"> * browser.</span>
<span class="c"> *</span>
<span class="c"> * @method clearTextSelection</span>
<span class="c"> */</span>
<span class="nx">clearTextSelection</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">sel</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nb">window</span><span class="o">.</span><span class="nx">getSelection</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">sel</span> <span class="o">=</span> <span class="nb">window</span><span class="o">.</span><span class="nx">getSelection</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">getSelection</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">sel</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">getSelection</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">selection</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">sel</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">selection</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">sel</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">sel</span><span class="o">.</span><span class="nx">empty</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">sel</span><span class="o">.</span><span class="nx">empty</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="nx">sel</span><span class="o">.</span><span class="nx">removeAllRanges</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">sel</span><span class="o">.</span><span class="nx">removeAllRanges</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">sel</span><span class="o">.</span><span class="nx">collapse</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">sel</span><span class="o">.</span><span class="nx">collapse</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Sets focus on the given element.</span>
<span class="c"> *</span>
<span class="c"> * @method _focusEl</span>
<span class="c"> * @param el {HTMLElement} Element.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_focusEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">el</span> <span class="o">=</span> <span class="nx">el</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">;</span>
<span class="c">// http://developer.mozilla.org/en/docs/index.php?title=Key-navigable_custom_DHTML_widgets</span>
<span class="c"></span> <span class="c">// The timeout is necessary in both IE and Firefox 1.5, to prevent scripts from doing</span>
<span class="c"></span> <span class="c">// strange unexpected things as the user clicks on buttons and other controls.</span>
<span class="c"></span> <span class="nx">setTimeout</span><span class="o">(</span><span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">try</span> <span class="o">{</span>
<span class="nx">el</span><span class="o">.</span><span class="nx">focus</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">catch</span><span class="o">(</span><span class="nx">e</span><span class="o">)</span> <span class="o">{</span>
<span class="o">}</span>
<span class="o">},</span><span class="m">0</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Forces Gecko repaint.</span>
<span class="c"> *</span>
<span class="c"> * @method _repaintGecko</span>
<span class="c"> * @el {HTMLElement} (Optional) Element to repaint, otherwise entire document body.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_repaintGecko</span> <span class="o">:</span> <span class="o">(</span><span class="nx">ua</span><span class="o">.</span><span class="nx">gecko</span><span class="o">)</span> <span class="o">?</span>
<span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">el</span> <span class="o">=</span> <span class="nx">el</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">parent</span> <span class="o">=</span> <span class="nx">el</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">nextSibling</span> <span class="o">=</span> <span class="nx">el</span><span class="o">.</span><span class="nx">nextSibling</span><span class="o">;</span>
<span class="nx">parent</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nx">parent</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">el</span><span class="o">),</span> <span class="nx">nextSibling</span><span class="o">);</span>
<span class="o">}</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{},</span>
<span class="c">/**</span>
<span class="c"> * Forces Opera repaint.</span>
<span class="c"> *</span>
<span class="c"> * @method _repaintOpera</span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_repaintOpera</span> <span class="o">:</span> <span class="o">(</span><span class="nx">ua</span><span class="o">.</span><span class="nx">opera</span><span class="o">)</span> <span class="o">?</span>
<span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">ua</span><span class="o">.</span><span class="nx">opera</span><span class="o">)</span> <span class="o">{</span>
<span class="nb">document</span><span class="o">.</span><span class="nx">documentElement</span><span class="o">.</span><span class="nx">className</span> <span class="o">+=</span> <span class="s2">&quot; &quot;</span><span class="o">;</span>
<span class="nb">document</span><span class="o">.</span><span class="nx">documentElement</span><span class="o">.</span><span class="nx">className</span><span class="o">.</span><span class="nx">trim</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{}</span> <span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Forces Webkit repaint.</span>
<span class="c"> *</span>
<span class="c"> * @method _repaintWebkit</span>
<span class="c"> * @el {HTMLElement} (Optional) Element to repaint, otherwise entire document body.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_repaintWebkit</span> <span class="o">:</span> <span class="o">(</span><span class="nx">ua</span><span class="o">.</span><span class="nx">webkit</span><span class="o">)</span> <span class="o">?</span>
<span class="k">function</span><span class="o">(</span><span class="nx">el</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">el</span> <span class="o">=</span> <span class="nx">el</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">parent</span> <span class="o">=</span> <span class="nx">el</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">nextSibling</span> <span class="o">=</span> <span class="nx">el</span><span class="o">.</span><span class="nx">nextSibling</span><span class="o">;</span>
<span class="nx">parent</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nx">parent</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">el</span><span class="o">),</span> <span class="nx">nextSibling</span><span class="o">);</span>
<span class="o">}</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{},</span>
<span class="c">// INIT FUNCTIONS</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Initializes object literal of config values.</span>
<span class="c"> *</span>
<span class="c"> * @method _initConfigs</span>
<span class="c"> * @param oConfig {Object} Object literal of config values.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initConfigs</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oConfigs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">oConfigs</span> <span class="o">||</span> <span class="o">!</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isObject</span><span class="o">(</span><span class="nx">oConfigs</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oConfigs</span> <span class="o">=</span> <span class="o">{};</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">configs</span> <span class="o">=</span> <span class="nx">oConfigs</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Initializes ColumnSet.</span>
<span class="c"> *</span>
<span class="c"> * @method _initColumnSet</span>
<span class="c"> * @param aColumnDefs {Object[]} Array of object literal Column definitions.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initColumnSet</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">aColumnDefs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">i</span><span class="o">,</span> <span class="nx">len</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// First clear _oDynStyles for existing ColumnSet and</span>
<span class="c"></span> <span class="c">// uregister CellEditor Custom Events</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">_oDynStyles</span><span class="o">[</span><span class="s2">&quot;.&quot;</span><span class="o">+</span><span class="k">this</span><span class="o">.</span><span class="nx">getId</span><span class="o">()+</span><span class="s2">&quot;-col-&quot;</span><span class="o">+</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getSanitizedKey</span><span class="o">()+</span><span class="s2">&quot; .&quot;</span><span class="o">+</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LINER</span><span class="o">]</span> <span class="o">=</span> <span class="kc">undefined</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span> <span class="o">&amp;&amp;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">unsubscribeAll</span><span class="o">)</span> <span class="o">{</span> <span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">unsubscribeAll</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_clearTrTemplateEl</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isArray</span><span class="o">(</span><span class="nx">aColumnDefs</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">ColumnSet</span><span class="o">(</span><span class="nx">aColumnDefs</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">aColumnDefs</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">ColumnSet</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span> <span class="o">=</span> <span class="nx">aColumnDefs</span><span class="o">;</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;DataTable&#39;s constructor now requires an array&quot;</span> <span class="o">+</span>
<span class="s2">&quot; of object literal Column definitions instead of a ColumnSet instance&quot;</span><span class="o">,</span>
<span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="c">// Register CellEditor Custom Events</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allKeys</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="nx">allKeys</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="nx">allKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span> <span class="o">&amp;&amp;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">)</span> <span class="o">{</span> <span class="c">// Backward incompatibility</span>
<span class="c"></span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;showEvent&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onEditorShowEvent</span><span class="o">,</span> <span class="k">this</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;keydownEvent&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onEditorKeydownEvent</span><span class="o">,</span> <span class="k">this</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;revertEvent&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onEditorRevertEvent</span><span class="o">,</span> <span class="k">this</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;saveEvent&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onEditorSaveEvent</span><span class="o">,</span> <span class="k">this</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;cancelEvent&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onEditorCancelEvent</span><span class="o">,</span> <span class="k">this</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;blurEvent&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onEditorBlurEvent</span><span class="o">,</span> <span class="k">this</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;blockEvent&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onEditorBlockEvent</span><span class="o">,</span> <span class="k">this</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;unblockEvent&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onEditorUnblockEvent</span><span class="o">,</span> <span class="k">this</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Initializes DataSource.</span>
<span class="c"> *</span>
<span class="c"> * @method _initDataSource</span>
<span class="c"> * @param oDataSource {YAHOO.util.DataSource} DataSource instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initDataSource</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oDataSource</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oDataSource</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oDataSource</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oDataSource</span> <span class="k">instanceof</span> <span class="nx">DS</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oDataSource</span> <span class="o">=</span> <span class="nx">oDataSource</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">tmpTable</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">tmpContainer</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span>
<span class="c">//TODO: this will break if re-initing DS at runtime for SDT</span>
<span class="c"></span> <span class="c">// Peek in container child nodes to see if TABLE already exists</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">tmpContainer</span><span class="o">.</span><span class="nx">hasChildNodes</span><span class="o">())</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">tmpChildren</span> <span class="o">=</span> <span class="nx">tmpContainer</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">tmpChildren</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">tmpChildren</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">nodeName</span> <span class="o">&amp;&amp;</span> <span class="nx">tmpChildren</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">tmpTable</span> <span class="o">=</span> <span class="nx">tmpChildren</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">tmpTable</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">tmpFieldsArray</span> <span class="o">=</span> <span class="o">[];</span>
<span class="k">for</span><span class="o">(;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">tmpFieldsArray</span><span class="o">.</span><span class="nx">push</span><span class="o">({</span><span class="nx">key</span><span class="o">:</span><span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">key</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oDataSource</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">DS</span><span class="o">(</span><span class="nx">tmpTable</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oDataSource</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_HTMLTABLE</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oDataSource</span><span class="o">.</span><span class="nx">responseSchema</span> <span class="o">=</span> <span class="o">{</span><span class="nx">fields</span><span class="o">:</span> <span class="nx">tmpFieldsArray</span><span class="o">};</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Null DataSource for progressive enhancement from&quot;</span> <span class="o">+</span>
<span class="s2">&quot; markup has been deprecated&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Initializes RecordSet.</span>
<span class="c"> *</span>
<span class="c"> * @method _initRecordSet</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initRecordSet</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">reset</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">RecordSet</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Initializes DOM elements.</span>
<span class="c"> *</span>
<span class="c"> * @method _initDomElements</span>
<span class="c"> * @param elContainer {HTMLElement | String} HTML DIV element by reference or ID. </span>
<span class="c"> * return {Boolean} False in case of error, otherwise true </span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initDomElements</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Outer container</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initContainerEl</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">);</span>
<span class="c">// TABLE</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initTableEl</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">);</span>
<span class="c">// COLGROUP</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initColgroupEl</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span><span class="o">);</span>
<span class="c">// THEAD</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initTheadEl</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span><span class="o">);</span>
<span class="c">// Message TBODY</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initMsgTbodyEl</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span><span class="o">);</span>
<span class="c">// Primary TBODY</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initTbodyEl</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span><span class="o">);</span>
<span class="k">if</span><span class="o">(!</span><span class="k">this</span><span class="o">.</span><span class="nx">_elContainer</span> <span class="o">||</span> <span class="o">!</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span> <span class="o">||</span> <span class="o">!</span><span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span> <span class="o">||</span> <span class="o">!</span><span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span> <span class="o">||</span> <span class="o">!</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span> <span class="o">||</span> <span class="o">!</span><span class="k">this</span><span class="o">.</span><span class="nx">_elMsgTbody</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not instantiate DataTable due to an invalid DOM elements&quot;</span><span class="o">,</span> <span class="s2">&quot;error&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Destroy&#39;s the DataTable outer container element, if available.</span>
<span class="c"> *</span>
<span class="c"> * @method _destroyContainerEl</span>
<span class="c"> * @param elContainer {HTMLElement} Reference to the container element. </span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_destroyContainerEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DATATABLE</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">purgeElement</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">elContainer</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elContainer</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Initializes the DataTable outer container element, including a mask.</span>
<span class="c"> *</span>
<span class="c"> * @method _initContainerEl</span>
<span class="c"> * @param elContainer {HTMLElement | String} HTML DIV element by reference or ID.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initContainerEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Validate container</span>
<span class="c"></span> <span class="nx">elContainer</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elContainer</span> <span class="o">&amp;&amp;</span> <span class="nx">elContainer</span><span class="o">.</span><span class="nx">nodeName</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elContainer</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">==</span> <span class="s2">&quot;div&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Destroy previous</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_destroyContainerEl</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">);</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DATATABLE</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">,</span> <span class="s2">&quot;focus&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTableFocus</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">,</span> <span class="s2">&quot;dblclick&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTableDblclick</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elContainer</span> <span class="o">=</span> <span class="nx">elContainer</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elMask</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;div&quot;</span><span class="o">);</span>
<span class="nx">elMask</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_MASK</span><span class="o">;</span>
<span class="nx">elMask</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elMask</span> <span class="o">=</span> <span class="nx">elContainer</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nx">elMask</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Destroy&#39;s the DataTable TABLE element, if available.</span>
<span class="c"> *</span>
<span class="c"> * @method _destroyTableEl</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_destroyTableEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTable</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTable</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">purgeElement</span><span class="o">(</span><span class="nx">elTable</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">elTable</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">elTable</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elCaption</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Creates HTML markup CAPTION element.</span>
<span class="c"> *</span>
<span class="c"> * @method _initCaptionEl</span>
<span class="c"> * @param sCaption {String} Text for caption.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initCaptionEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">sCaption</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span> <span class="o">&amp;&amp;</span> <span class="nx">sCaption</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Create CAPTION element</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="k">this</span><span class="o">.</span><span class="nx">_elCaption</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elCaption</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span><span class="o">.</span><span class="nx">createCaption</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">// Set CAPTION value</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_elCaption</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">sCaption</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elCaption</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elCaption</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elCaption</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Creates HTML markup for TABLE, COLGROUP, THEAD and TBODY elements in outer</span>
<span class="c"> * container element.</span>
<span class="c"> *</span>
<span class="c"> * @method _initTableEl</span>
<span class="c"> * @param elContainer {HTMLElement} Container element into which to create TABLE.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initTableEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Destroy previous</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_destroyTableEl</span><span class="o">();</span>
<span class="c">// Create TABLE</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span> <span class="o">=</span> <span class="nx">elContainer</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;table&quot;</span><span class="o">));</span>
<span class="c">// Set SUMMARY attribute</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span><span class="o">.</span><span class="nx">summary</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;summary&quot;</span><span class="o">);</span>
<span class="c">// Create CAPTION element</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;caption&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_initCaptionEl</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;caption&quot;</span><span class="o">));</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Destroy&#39;s the DataTable COLGROUP element, if available.</span>
<span class="c"> *</span>
<span class="c"> * @method _destroyColgroupEl</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_destroyColgroupEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elColgroup</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elColgroup</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTable</span> <span class="o">=</span> <span class="nx">elColgroup</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">purgeElement</span><span class="o">(</span><span class="nx">elColgroup</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">elTable</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">elColgroup</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Initializes COLGROUP and COL elements for managing minWidth.</span>
<span class="c"> *</span>
<span class="c"> * @method _initColgroupEl</span>
<span class="c"> * @param elTable {HTMLElement} TABLE element into which to create COLGROUP.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initColgroupEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elTable</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTable</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Destroy previous</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_destroyColgroupEl</span><span class="o">();</span>
<span class="c">// Add COLs to DOCUMENT FRAGMENT</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allCols</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aColIds</span> <span class="o">||</span> <span class="o">[],</span>
<span class="nx">allKeys</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">,</span>
<span class="nx">i</span> <span class="o">=</span> <span class="m">0</span><span class="o">,</span> <span class="nx">len</span> <span class="o">=</span> <span class="nx">allCols</span><span class="o">.</span><span class="nx">length</span><span class="o">,</span>
<span class="nx">elCol</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span>
<span class="nx">elFragment</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createDocumentFragment</span><span class="o">(),</span>
<span class="nx">elColTemplate</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;col&quot;</span><span class="o">);</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span><span class="nx">len</span><span class="o">=</span><span class="nx">allKeys</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="nx">allKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="nx">elCol</span> <span class="o">=</span> <span class="nx">elFragment</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nx">elColTemplate</span><span class="o">.</span><span class="nx">cloneNode</span><span class="o">(</span><span class="kc">false</span><span class="o">));</span>
<span class="o">}</span>
<span class="c">// Create COLGROUP</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elColgroup</span> <span class="o">=</span> <span class="nx">elTable</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;colgroup&quot;</span><span class="o">),</span> <span class="nx">elTable</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">);</span>
<span class="nx">elColgroup</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nx">elFragment</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span> <span class="o">=</span> <span class="nx">elColgroup</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Adds a COL element to COLGROUP at given index.</span>
<span class="c"> *</span>
<span class="c"> * @method _insertColgroupColEl</span>
<span class="c"> * @param index {Number} Index of new COL element.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_insertColgroupColEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">index</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">index</span><span class="o">)&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nextSibling</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">index</span><span class="o">]</span> <span class="o">||</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;col&quot;</span><span class="o">),</span> <span class="nx">nextSibling</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Removes a COL element to COLGROUP at given index.</span>
<span class="c"> *</span>
<span class="c"> * @method _removeColgroupColEl</span>
<span class="c"> * @param index {Number} Index of removed COL element.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_removeColgroupColEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">index</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">index</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">index</span><span class="o">])</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">index</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Reorders a COL element from old index(es) to new index.</span>
<span class="c"> *</span>
<span class="c"> * @method _reorderColgroupColEl</span>
<span class="c"> * @param aKeyIndexes {Number[]} Array of indexes of removed COL element.</span>
<span class="c"> * @param newIndex {Number} New index. </span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_reorderColgroupColEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">aKeyIndexes</span><span class="o">,</span> <span class="nx">newIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isArray</span><span class="o">(</span><span class="nx">aKeyIndexes</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">newIndex</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="nx">aKeyIndexes</span><span class="o">[</span><span class="nx">aKeyIndexes</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">]))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">i</span><span class="o">,</span>
<span class="nx">tmpCols</span> <span class="o">=</span> <span class="o">[];</span>
<span class="c">// Remove COL</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">aKeyIndexes</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="nx">tmpCols</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">aKeyIndexes</span><span class="o">[</span><span class="nx">i</span><span class="o">]]));</span>
<span class="o">}</span>
<span class="c">// Insert COL</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">nextSibling</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">newIndex</span><span class="o">]</span> <span class="o">||</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">tmpCols</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nx">tmpCols</span><span class="o">[</span><span class="nx">i</span><span class="o">],</span> <span class="nx">nextSibling</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Destroy&#39;s the DataTable THEAD element, if available.</span>
<span class="c"> *</span>
<span class="c"> * @method _destroyTheadEl</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_destroyTheadEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elThead</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elThead</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTable</span> <span class="o">=</span> <span class="nx">elThead</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">purgeElement</span><span class="o">(</span><span class="nx">elThead</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_destroyColumnHelpers</span><span class="o">();</span>
<span class="nx">elTable</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">elThead</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Initializes THEAD element.</span>
<span class="c"> *</span>
<span class="c"> * @method _initTheadEl</span>
<span class="c"> * @param elTable {HTMLElement} TABLE element into which to create COLGROUP.</span>
<span class="c"> * @param {HTMLElement} Initialized THEAD element. </span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initTheadEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elTable</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTable</span> <span class="o">=</span> <span class="nx">elTable</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTable</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Destroy previous</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_destroyTheadEl</span><span class="o">();</span>
<span class="c">//TODO: append to DOM later for performance</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elThead</span> <span class="o">=</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">)</span> <span class="o">?</span>
<span class="nx">elTable</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;thead&quot;</span><span class="o">),</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">.</span><span class="nx">nextSibling</span><span class="o">)</span> <span class="o">:</span>
<span class="nx">elTable</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;thead&quot;</span><span class="o">));</span>
<span class="c">// Set up DOM events for THEAD</span>
<span class="c"></span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elThead</span><span class="o">,</span> <span class="s2">&quot;focus&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTheadFocus</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elThead</span><span class="o">,</span> <span class="s2">&quot;keydown&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTheadKeydown</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elThead</span><span class="o">,</span> <span class="s2">&quot;mouseover&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTableMouseover</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elThead</span><span class="o">,</span> <span class="s2">&quot;mouseout&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTableMouseout</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elThead</span><span class="o">,</span> <span class="s2">&quot;mousedown&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTableMousedown</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elThead</span><span class="o">,</span> <span class="s2">&quot;mouseup&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTableMouseup</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elThead</span><span class="o">,</span> <span class="s2">&quot;click&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTheadClick</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="c">// Since we can&#39;t listen for click and dblclick on the same element...</span>
<span class="c"></span> <span class="c">// Attach separately to THEAD and TBODY</span>
<span class="c"></span> <span class="c">///Ev.addListener(elThead, &quot;dblclick&quot;, this._onTableDblclick, this);</span>
<span class="c"></span>
<span class="k">var</span> <span class="nx">oColumnSet</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">,</span>
<span class="nx">oColumn</span><span class="o">,</span> <span class="nx">i</span><span class="o">,</span><span class="nx">j</span><span class="o">,</span> <span class="nx">l</span><span class="o">;</span>
<span class="c">// Add TRs to the THEAD</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">colTree</span> <span class="o">=</span> <span class="nx">oColumnSet</span><span class="o">.</span><span class="nx">tree</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elTh</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">colTree</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTheadTr</span> <span class="o">=</span> <span class="nx">elThead</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;tr&quot;</span><span class="o">));</span>
<span class="c">// ...and create TH cells</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;</span><span class="nx">colTree</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">length</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="nx">colTree</span><span class="o">[</span><span class="nx">i</span><span class="o">][</span><span class="nx">j</span><span class="o">];</span>
<span class="nx">elTh</span> <span class="o">=</span> <span class="nx">elTheadTr</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;th&quot;</span><span class="o">));</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_initThEl</span><span class="o">(</span><span class="nx">elTh</span><span class="o">,</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Set FIRST/LAST on THEAD rows</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">i</span> <span class="o">===</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elTheadTr</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_FIRST</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">i</span> <span class="o">===</span> <span class="o">(</span><span class="nx">colTree</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elTheadTr</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LAST</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Set FIRST/LAST on edge TH elements using the values in ColumnSet headers array</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">aFirstHeaders</span> <span class="o">=</span> <span class="nx">oColumnSet</span><span class="o">.</span><span class="nx">headers</span><span class="o">[</span><span class="m">0</span><span class="o">]</span> <span class="o">||</span> <span class="o">[];</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">aFirstHeaders</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">getId</span><span class="o">()</span> <span class="o">+</span><span class="s2">&quot;-th-&quot;</span><span class="o">+</span><span class="nx">aFirstHeaders</span><span class="o">[</span><span class="nx">i</span><span class="o">]),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_FIRST</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">var</span> <span class="nx">aLastHeaders</span> <span class="o">=</span> <span class="nx">oColumnSet</span><span class="o">.</span><span class="nx">headers</span><span class="o">[</span><span class="nx">oColumnSet</span><span class="o">.</span><span class="nx">headers</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">]</span> <span class="o">||</span> <span class="o">[];</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">aLastHeaders</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">getId</span><span class="o">()</span> <span class="o">+</span><span class="s2">&quot;-th-&quot;</span><span class="o">+</span><span class="nx">aLastHeaders</span><span class="o">[</span><span class="nx">i</span><span class="o">]),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LAST</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;TH cells for &quot;</span> <span class="o">+</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">.</span><span class="nx">length</span> <span class="o">+</span> <span class="s2">&quot; keys created&quot;</span><span class="o">,</span><span class="s2">&quot;info&quot;</span><span class="o">,</span><span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="c">///TODO: try _repaintGecko(this._elContainer) instead</span>
<span class="c"></span> <span class="c">// Bug 1806891</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">ua</span><span class="o">.</span><span class="nx">webkit</span> <span class="o">&amp;&amp;</span> <span class="nx">ua</span><span class="o">.</span><span class="nx">webkit</span> <span class="o">&lt;</span> <span class="m">420</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oSelf</span> <span class="o">=</span> <span class="k">this</span><span class="o">;</span>
<span class="nx">setTimeout</span><span class="o">(</span><span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="nx">elThead</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="o">},</span><span class="m">0</span><span class="o">);</span>
<span class="nx">elThead</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s1">&#39;none&#39;</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span> <span class="o">=</span> <span class="nx">elThead</span><span class="o">;</span>
<span class="c">// Column helpers needs _elThead to exist</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initColumnHelpers</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Populates TH element as defined by Column.</span>
<span class="c"> *</span>
<span class="c"> * @method _initThEl</span>
<span class="c"> * @param elTh {HTMLElement} TH element reference.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column object.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initThEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elTh</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTh</span><span class="o">.</span><span class="nx">id</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getId</span><span class="o">()</span> <span class="o">+</span> <span class="s2">&quot;-th-&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getSanitizedKey</span><span class="o">();</span> <span class="c">// Needed for accessibility, getColumn by TH, and ColumnDD</span>
<span class="c"></span> <span class="nx">elTh</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="nx">elTh</span><span class="o">.</span><span class="nx">rowSpan</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getRowspan</span><span class="o">();</span>
<span class="nx">elTh</span><span class="o">.</span><span class="nx">colSpan</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getColspan</span><span class="o">();</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">_elTh</span> <span class="o">=</span> <span class="nx">elTh</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elThLiner</span> <span class="o">=</span> <span class="nx">elTh</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;div&quot;</span><span class="o">));</span>
<span class="nx">elThLiner</span><span class="o">.</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">elTh</span><span class="o">.</span><span class="nx">id</span> <span class="o">+</span> <span class="s2">&quot;-liner&quot;</span><span class="o">;</span> <span class="c">// Needed for resizer</span>
<span class="c"></span> <span class="nx">elThLiner</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LINER</span><span class="o">;</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">_elThLiner</span> <span class="o">=</span> <span class="nx">elThLiner</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elThLabel</span> <span class="o">=</span> <span class="nx">elThLiner</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;span&quot;</span><span class="o">));</span>
<span class="nx">elThLabel</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LABEL</span><span class="o">;</span>
<span class="c">// Assign abbr attribute</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">abbr</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTh</span><span class="o">.</span><span class="nx">abbr</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">abbr</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Clear minWidth on hidden Columns</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">hidden</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_clearMinWidth</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">elTh</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getColumnClassNames</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="c">// Set Column width for non fallback cases</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">width</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="k">this</span><span class="o">.</span><span class="nx">_bDynStylesFallback</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Validate minWidth</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">nWidth</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">width</span> <span class="o">&lt;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span><span class="o">))</span> <span class="o">?</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span> <span class="o">:</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">width</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setColumnWidthDynStyles</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">nWidth</span> <span class="o">+</span> <span class="s1">&#39;px&#39;</span><span class="o">,</span> <span class="s1">&#39;hidden&#39;</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">formatTheadCell</span><span class="o">(</span><span class="nx">elThLabel</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;sortedBy&quot;</span><span class="o">));</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">_elThLabel</span> <span class="o">=</span> <span class="nx">elThLabel</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Outputs markup into the given TH based on given Column.</span>
<span class="c"> *</span>
<span class="c"> * @method DataTable.formatTheadCell</span>
<span class="c"> * @param elCellLabel {HTMLElement} The label SPAN element within the TH liner,</span>
<span class="c"> * not the liner DIV element. </span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oSortedBy {Object} Sort state object literal.</span>
<span class="c">*/</span>
<span class="nx">formatTheadCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elCellLabel</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oSortedBy</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">sKey</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKey</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">sLabel</span> <span class="o">=</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="k">label</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oColumn</span><span class="o">.</span><span class="k">label</span> <span class="o">:</span> <span class="nx">sKey</span><span class="o">;</span>
<span class="c">// Add accessibility link for sortable Columns</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortable</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Calculate the direction</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">sSortClass</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumnSortDir</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oSortedBy</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">bDesc</span> <span class="o">=</span> <span class="o">(</span><span class="nx">sSortClass</span> <span class="o">===</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DESC</span><span class="o">);</span>
<span class="c">// This is the sorted Column</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oSortedBy</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">===</span> <span class="nx">oSortedBy</span><span class="o">.</span><span class="nx">key</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">bDesc</span> <span class="o">=</span> <span class="o">!(</span><span class="nx">oSortedBy</span><span class="o">.</span><span class="nx">dir</span> <span class="o">===</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DESC</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Generate a unique HREF for visited status</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">sHref</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getId</span><span class="o">()</span> <span class="o">+</span> <span class="s2">&quot;-href-&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getSanitizedKey</span><span class="o">();</span>
<span class="c">// Generate a dynamic TITLE for sort status</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">sTitle</span> <span class="o">=</span> <span class="o">(</span><span class="nx">bDesc</span><span class="o">)</span> <span class="o">?</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;MSG_SORTDESC&quot;</span><span class="o">)</span> <span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;MSG_SORTASC&quot;</span><span class="o">);</span>
<span class="c">// Format the element</span>
<span class="c"></span> <span class="nx">elCellLabel</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&quot;&lt;a href=\&quot;&quot;</span> <span class="o">+</span> <span class="nx">sHref</span> <span class="o">+</span> <span class="s2">&quot;\&quot; title=\&quot;&quot;</span> <span class="o">+</span> <span class="nx">sTitle</span> <span class="o">+</span> <span class="s2">&quot;\&quot; class=\&quot;&quot;</span> <span class="o">+</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SORTABLE</span> <span class="o">+</span> <span class="s2">&quot;\&quot;&gt;&quot;</span> <span class="o">+</span> <span class="nx">sLabel</span> <span class="o">+</span> <span class="s2">&quot;&lt;/a&gt;&quot;</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Just display the label for non-sortable Columns</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">elCellLabel</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">sLabel</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Disables DD from top-level Column TH elements.</span>
<span class="c"> *</span>
<span class="c"> * @method _destroyDraggableColumns</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_destroyDraggableColumns</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">elTh</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">tree</span><span class="o">[</span><span class="m">0</span><span class="o">].</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">tree</span><span class="o">[</span><span class="m">0</span><span class="o">][</span><span class="nx">i</span><span class="o">];</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">_dd</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">_dd</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">_dd</span><span class="o">.</span><span class="nx">unreg</span><span class="o">();</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">(),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DRAGGABLE</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Initializes top-level Column TH elements into DD instances.</span>
<span class="c"> *</span>
<span class="c"> * @method _initDraggableColumns</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initDraggableColumns</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_destroyDraggableColumns</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">DD</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">elTh</span><span class="o">,</span> <span class="nx">elDragTarget</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">tree</span><span class="o">[</span><span class="m">0</span><span class="o">].</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">tree</span><span class="o">[</span><span class="m">0</span><span class="o">][</span><span class="nx">i</span><span class="o">];</span>
<span class="nx">elTh</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">();</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elTh</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DRAGGABLE</span><span class="o">);</span>
<span class="nx">elDragTarget</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_initColumnDragTargetEl</span><span class="o">();</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">_dd</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">ColumnDD</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">elTh</span><span class="o">,</span> <span class="nx">elDragTarget</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not find DragDrop for draggable Columns&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Disables resizeability on key Column TH elements.</span>
<span class="c"> *</span>
<span class="c"> * @method _destroyResizeableColumns</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_destroyResizeableColumns</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">aKeys</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="nx">aKeys</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">aKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">_ddResizer</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">aKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">_ddResizer</span> <span class="o">=</span> <span class="nx">aKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">_ddResizer</span><span class="o">.</span><span class="nx">unreg</span><span class="o">();</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">aKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">getThEl</span><span class="o">(),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_RESIZEABLE</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Initializes resizeability on key Column TH elements.</span>
<span class="c"> *</span>
<span class="c"> * @method _initResizeableColumns</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initResizeableColumns</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_destroyResizeableColumns</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">DD</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">elTh</span><span class="o">,</span> <span class="nx">elThLiner</span><span class="o">,</span> <span class="nx">elThResizerLiner</span><span class="o">,</span> <span class="nx">elThResizer</span><span class="o">,</span> <span class="nx">elResizerProxy</span><span class="o">,</span> <span class="nx">cancelClick</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">resizeable</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTh</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">();</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elTh</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_RESIZEABLE</span><span class="o">);</span>
<span class="nx">elThLiner</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getThLinerEl</span><span class="o">();</span>
<span class="c">// Bug 1915349: So resizer is as tall as TH when rowspan &gt; 1</span>
<span class="c"></span> <span class="c">// Create a separate resizer liner with position:relative</span>
<span class="c"></span> <span class="nx">elThResizerLiner</span> <span class="o">=</span> <span class="nx">elTh</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;div&quot;</span><span class="o">));</span>
<span class="nx">elThResizerLiner</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_RESIZERLINER</span><span class="o">;</span>
<span class="c">// Move TH contents into the new resizer liner</span>
<span class="c"></span> <span class="nx">elThResizerLiner</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nx">elThLiner</span><span class="o">);</span>
<span class="c">// Create the resizer</span>
<span class="c"></span> <span class="nx">elThResizer</span> <span class="o">=</span> <span class="nx">elThResizerLiner</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;div&quot;</span><span class="o">));</span>
<span class="nx">elThResizer</span><span class="o">.</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">elTh</span><span class="o">.</span><span class="nx">id</span> <span class="o">+</span> <span class="s2">&quot;-resizer&quot;</span><span class="o">;</span> <span class="c">// Needed for ColumnResizer</span>
<span class="c"></span> <span class="nx">elThResizer</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_RESIZER</span><span class="o">;</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">_elResizer</span> <span class="o">=</span> <span class="nx">elThResizer</span><span class="o">;</span>
<span class="c">// Create the resizer proxy, once globally</span>
<span class="c"></span> <span class="nx">elResizerProxy</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_initColumnResizerProxyEl</span><span class="o">();</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">_ddResizer</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">ColumnResizer</span><span class="o">(</span>
<span class="k">this</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">elTh</span><span class="o">,</span> <span class="nx">elThResizer</span><span class="o">,</span> <span class="nx">elResizerProxy</span><span class="o">);</span>
<span class="nx">cancelClick</span> <span class="o">=</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">stopPropagation</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="o">};</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elThResizer</span><span class="o">,</span><span class="s2">&quot;click&quot;</span><span class="o">,</span><span class="nx">cancelClick</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not find DragDrop for resizeable Columns&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Destroys elements associated with Column functionality: ColumnDD and ColumnResizers.</span>
<span class="c"> *</span>
<span class="c"> * @method _destroyColumnHelpers</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_destroyColumnHelpers</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_destroyDraggableColumns</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_destroyResizeableColumns</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Initializes elements associated with Column functionality: ColumnDD and ColumnResizers.</span>
<span class="c"> *</span>
<span class="c"> * @method _initColumnHelpers</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initColumnHelpers</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;draggableColumns&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_initDraggableColumns</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_initResizeableColumns</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Destroy&#39;s the DataTable TBODY element, if available.</span>
<span class="c"> *</span>
<span class="c"> * @method _destroyTbodyEl</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_destroyTbodyEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTbody</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTable</span> <span class="o">=</span> <span class="nx">elTbody</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">purgeElement</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">elTable</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Initializes TBODY element for data.</span>
<span class="c"> *</span>
<span class="c"> * @method _initTbodyEl</span>
<span class="c"> * @param elTable {HTMLElement} TABLE element into which to create TBODY .</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initTbodyEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elTable</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTable</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Destroy previous</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_destroyTbodyEl</span><span class="o">();</span>
<span class="c">// Create TBODY</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTbody</span> <span class="o">=</span> <span class="nx">elTable</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;tbody&quot;</span><span class="o">));</span>
<span class="nx">elTbody</span><span class="o">.</span><span class="nx">tabIndex</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
<span class="nx">elTbody</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DATA</span><span class="o">;</span>
<span class="c">// Set up DOM events for TBODY</span>
<span class="c"></span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">,</span> <span class="s2">&quot;focus&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTbodyFocus</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">,</span> <span class="s2">&quot;mouseover&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTableMouseover</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">,</span> <span class="s2">&quot;mouseout&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTableMouseout</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">,</span> <span class="s2">&quot;mousedown&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTableMousedown</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">,</span> <span class="s2">&quot;mouseup&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTableMouseup</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">,</span> <span class="s2">&quot;keydown&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTbodyKeydown</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">,</span> <span class="s2">&quot;keypress&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTableKeypress</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">,</span> <span class="s2">&quot;click&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onTbodyClick</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="c">// Since we can&#39;t listen for click and dblclick on the same element...</span>
<span class="c"></span> <span class="c">// Attach separately to THEAD and TBODY</span>
<span class="c"></span> <span class="c">///Ev.addListener(elTbody, &quot;dblclick&quot;, this._onTableDblclick, this);</span>
<span class="c"></span>
<span class="c">// IE puts focus outline in the wrong place</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">ua</span><span class="o">.</span><span class="nx">ie</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTbody</span><span class="o">.</span><span class="nx">hideFocus</span><span class="o">=</span><span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span> <span class="o">=</span> <span class="nx">elTbody</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Destroy&#39;s the DataTable message TBODY element, if available.</span>
<span class="c"> *</span>
<span class="c"> * @method _destroyMsgTbodyEl</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_destroyMsgTbodyEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elMsgTbody</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elMsgTbody</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elMsgTbody</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTable</span> <span class="o">=</span> <span class="nx">elMsgTbody</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">purgeElement</span><span class="o">(</span><span class="nx">elMsgTbody</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">elTable</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">elMsgTbody</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Initializes TBODY element for messaging.</span>
<span class="c"> *</span>
<span class="c"> * @method _initMsgTbodyEl</span>
<span class="c"> * @param elTable {HTMLElement} TABLE element into which to create TBODY </span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initMsgTbodyEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elTable</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTable</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elMsgTbody</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;tbody&quot;</span><span class="o">);</span>
<span class="nx">elMsgTbody</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_MESSAGE</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elMsgTr</span> <span class="o">=</span> <span class="nx">elMsgTbody</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;tr&quot;</span><span class="o">));</span>
<span class="nx">elMsgTr</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_FIRST</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LAST</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elMsgTr</span> <span class="o">=</span> <span class="nx">elMsgTr</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elMsgTd</span> <span class="o">=</span> <span class="nx">elMsgTr</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;td&quot;</span><span class="o">));</span>
<span class="nx">elMsgTd</span><span class="o">.</span><span class="nx">colSpan</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span>
<span class="nx">elMsgTd</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_FIRST</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LAST</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elMsgTd</span> <span class="o">=</span> <span class="nx">elMsgTd</span><span class="o">;</span>
<span class="nx">elMsgTbody</span> <span class="o">=</span> <span class="nx">elTable</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nx">elMsgTbody</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elMsgLiner</span> <span class="o">=</span> <span class="nx">elMsgTd</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;div&quot;</span><span class="o">));</span>
<span class="nx">elMsgLiner</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LINER</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elMsgTbody</span> <span class="o">=</span> <span class="nx">elMsgTbody</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Initialize internal event listeners</span>
<span class="c"> *</span>
<span class="c"> * @method _initEvents</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_initEvents</span> <span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="c">// Initialize Column sort</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initColumnSort</span><span class="o">();</span>
<span class="c">// Add the document level click listener</span>
<span class="c"></span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">Event</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nb">document</span><span class="o">,</span> <span class="s2">&quot;click&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onDocumentClick</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="c">// Paginator integration</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;paginatorChange&quot;</span><span class="o">,</span><span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_handlePaginatorChange</span><span class="o">.</span><span class="nx">apply</span><span class="o">(</span><span class="k">this</span><span class="o">,</span><span class="nx">arguments</span><span class="o">);</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;initEvent&quot;</span><span class="o">,</span><span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">renderPaginator</span><span class="o">();</span>
<span class="o">});</span>
<span class="c">// Initialize CellEditor integration</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_initCellEditing</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">/** </span>
<span class="c"> * Initializes Column sorting. </span>
<span class="c"> * </span>
<span class="c"> * @method _initColumnSort </span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_initColumnSort</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;theadCellClickEvent&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">onEventSortColumn</span><span class="o">);</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oSortedBy</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;sortedBy&quot;</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oSortedBy</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oSortedBy</span><span class="o">.</span><span class="nx">dir</span> <span class="o">==</span> <span class="s2">&quot;desc&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_configs</span><span class="o">.</span><span class="nx">sortedBy</span><span class="o">.</span><span class="nx">value</span><span class="o">.</span><span class="nx">dir</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DESC</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oSortedBy</span><span class="o">.</span><span class="nx">dir</span> <span class="o">==</span> <span class="s2">&quot;asc&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_configs</span><span class="o">.</span><span class="nx">sortedBy</span><span class="o">.</span><span class="nx">value</span><span class="o">.</span><span class="nx">dir</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ASC</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/** </span>
<span class="c"> * Initializes CellEditor integration. </span>
<span class="c"> * </span>
<span class="c"> * @method _initCellEditing </span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_initCellEditing</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;editorBlurEvent&quot;</span><span class="o">,</span><span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">onEditorBlurEvent</span><span class="o">.</span><span class="nx">apply</span><span class="o">(</span><span class="k">this</span><span class="o">,</span><span class="nx">arguments</span><span class="o">);</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;editorBlockEvent&quot;</span><span class="o">,</span><span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">onEditorBlockEvent</span><span class="o">.</span><span class="nx">apply</span><span class="o">(</span><span class="k">this</span><span class="o">,</span><span class="nx">arguments</span><span class="o">);</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s2">&quot;editorUnblockEvent&quot;</span><span class="o">,</span><span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">onEditorUnblockEvent</span><span class="o">.</span><span class="nx">apply</span><span class="o">(</span><span class="k">this</span><span class="o">,</span><span class="nx">arguments</span><span class="o">);</span>
<span class="o">});</span>
<span class="o">},</span>
<span class="c">// DOM MUTATION FUNCTIONS</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Retruns classnames to represent current Column states.</span>
<span class="c"> * @method _getColumnClassnames </span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param aAddClasses {String[]} An array of additional classnames to add to the</span>
<span class="c"> * return value. </span>
<span class="c"> * @return {String} A String of classnames to be assigned to TH or TD elements</span>
<span class="c"> * for given Column. </span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_getColumnClassNames</span> <span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">aAddClasses</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">allClasses</span><span class="o">;</span>
<span class="c">// Add CSS classes</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">className</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Single custom class</span>
<span class="c"></span> <span class="nx">allClasses</span> <span class="o">=</span> <span class="o">[</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">className</span><span class="o">];</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isArray</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">className</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Array of custom classes</span>
<span class="c"></span> <span class="nx">allClasses</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">className</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="c">// no custom classes</span>
<span class="c"></span> <span class="nx">allClasses</span> <span class="o">=</span> <span class="o">[];</span>
<span class="o">}</span>
<span class="c">// Hook for setting width with via dynamic style uses key since ID is too disposable</span>
<span class="c"></span> <span class="nx">allClasses</span><span class="o">[</span><span class="nx">allClasses</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getId</span><span class="o">()</span> <span class="o">+</span> <span class="s2">&quot;-col-&quot;</span> <span class="o">+</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getSanitizedKey</span><span class="o">();</span>
<span class="c">// Column key - minus any chars other than &quot;A-Z&quot;, &quot;a-z&quot;, &quot;0-9&quot;, &quot;_&quot;, &quot;-&quot;, &quot;.&quot;, or &quot;:&quot;</span>
<span class="c"></span> <span class="nx">allClasses</span><span class="o">[</span><span class="nx">allClasses</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="s2">&quot;yui-dt-col-&quot;</span> <span class="o">+</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getSanitizedKey</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">isSortedBy</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;sortedBy&quot;</span><span class="o">)</span> <span class="o">||</span> <span class="o">{};</span>
<span class="c">// Sorted</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">===</span> <span class="nx">isSortedBy</span><span class="o">.</span><span class="nx">key</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">allClasses</span><span class="o">[</span><span class="nx">allClasses</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">isSortedBy</span><span class="o">.</span><span class="nx">dir</span> <span class="o">||</span> <span class="s1">&#39;&#39;</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Hidden</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">hidden</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">allClasses</span><span class="o">[</span><span class="nx">allClasses</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_HIDDEN</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Selected</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">selected</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">allClasses</span><span class="o">[</span><span class="nx">allClasses</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Sortable</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortable</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">allClasses</span><span class="o">[</span><span class="nx">allClasses</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SORTABLE</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Resizeable</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">resizeable</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">allClasses</span><span class="o">[</span><span class="nx">allClasses</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_RESIZEABLE</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Editable</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">allClasses</span><span class="o">[</span><span class="nx">allClasses</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_EDITABLE</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Addtnl classes, including First/Last</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">aAddClasses</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">allClasses</span> <span class="o">=</span> <span class="nx">allClasses</span><span class="o">.</span><span class="nx">concat</span><span class="o">(</span><span class="nx">aAddClasses</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">allClasses</span><span class="o">.</span><span class="nx">join</span><span class="o">(</span><span class="s1">&#39; &#39;</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Clears TR element template in response to any Column state change.</span>
<span class="c"> * @method _clearTrTemplateEl</span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_clearTrTemplateEl</span> <span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTrTemplate</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns a new TR element template with TD elements classed with current</span>
<span class="c"> * Column states.</span>
<span class="c"> * @method _getTrTemplateEl </span>
<span class="c"> * @return {HTMLElement} A TR element to be cloned and added to the DOM.</span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_getTrTemplateEl</span> <span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">index</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Template is already available</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTrTemplate</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTrTemplate</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Template needs to be created</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">d</span> <span class="o">=</span> <span class="nb">document</span><span class="o">,</span>
<span class="nx">tr</span> <span class="o">=</span> <span class="nx">d</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s1">&#39;tr&#39;</span><span class="o">),</span>
<span class="nx">td</span> <span class="o">=</span> <span class="nx">d</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s1">&#39;td&#39;</span><span class="o">),</span>
<span class="nx">div</span> <span class="o">=</span> <span class="nx">d</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s1">&#39;div&#39;</span><span class="o">);</span>
<span class="c">// Append the liner element</span>
<span class="c"></span> <span class="nx">td</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nx">div</span><span class="o">);</span>
<span class="c">// Create TD elements into DOCUMENT FRAGMENT</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">df</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createDocumentFragment</span><span class="o">(),</span>
<span class="nx">allKeys</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">,</span>
<span class="nx">elTd</span><span class="o">;</span>
<span class="c">// Set state for each TD;</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">aAddClasses</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">keysLen</span><span class="o">=</span><span class="nx">allKeys</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">keysLen</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="c">// Clone the TD template</span>
<span class="c"></span> <span class="nx">elTd</span> <span class="o">=</span> <span class="nx">td</span><span class="o">.</span><span class="nx">cloneNode</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="c">// Format the base TD</span>
<span class="c"></span> <span class="nx">elTd</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_formatTdEl</span><span class="o">(</span><span class="nx">allKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">],</span> <span class="nx">elTd</span><span class="o">,</span> <span class="nx">i</span><span class="o">,</span> <span class="o">(</span><span class="nx">i</span><span class="o">===</span><span class="nx">keysLen</span><span class="o">-</span><span class="m">1</span><span class="o">));</span>
<span class="nx">df</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nx">elTd</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">tr</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nx">df</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTrTemplate</span> <span class="o">=</span> <span class="nx">tr</span><span class="o">;</span>
<span class="k">return</span> <span class="nx">tr</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats a basic TD element.</span>
<span class="c"> * @method _formatTdEl </span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Associated Column instance. </span>
<span class="c"> * @param elTd {HTMLElement} An unformatted TD element.</span>
<span class="c"> * @param index {Number} Column key index. </span>
<span class="c"> * @param isLast {Boolean} True if Column is last key of the ColumnSet.</span>
<span class="c"> * @return {HTMLElement} A formatted TD element.</span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_formatTdEl</span> <span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">elTd</span><span class="o">,</span> <span class="nx">index</span><span class="o">,</span> <span class="nx">isLast</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oColumnSet</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">;</span>
<span class="c">// Set the TD&#39;s accessibility headers</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allHeaders</span> <span class="o">=</span> <span class="nx">oColumnSet</span><span class="o">.</span><span class="nx">headers</span><span class="o">,</span>
<span class="nx">allColHeaders</span> <span class="o">=</span> <span class="nx">allHeaders</span><span class="o">[</span><span class="nx">index</span><span class="o">],</span>
<span class="nx">sTdHeaders</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">,</span>
<span class="nx">sHeader</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">headersLen</span><span class="o">=</span><span class="nx">allColHeaders</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">j</span> <span class="o">&lt;</span> <span class="nx">headersLen</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">sHeader</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span> <span class="o">+</span> <span class="s2">&quot;-th-&quot;</span> <span class="o">+</span> <span class="nx">allColHeaders</span><span class="o">[</span><span class="nx">j</span><span class="o">]</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span><span class="o">;</span>
<span class="nx">sTdHeaders</span> <span class="o">+=</span> <span class="nx">sHeader</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">elTd</span><span class="o">.</span><span class="nx">headers</span> <span class="o">=</span> <span class="nx">sTdHeaders</span><span class="o">;</span>
<span class="c">// Class the TD element</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">aAddClasses</span> <span class="o">=</span> <span class="o">[];</span>
<span class="k">if</span><span class="o">(</span><span class="nx">index</span> <span class="o">===</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">aAddClasses</span><span class="o">[</span><span class="nx">aAddClasses</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_FIRST</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">isLast</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">aAddClasses</span><span class="o">[</span><span class="nx">aAddClasses</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LAST</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">elTd</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getColumnClassNames</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">aAddClasses</span><span class="o">);</span>
<span class="c">// Class the liner element</span>
<span class="c"></span> <span class="nx">elTd</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LINER</span><span class="o">;</span>
<span class="c">// Set Column width for fallback cases</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">width</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_bDynStylesFallback</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Validate minWidth</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">nWidth</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">width</span> <span class="o">&lt;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span><span class="o">))</span> <span class="o">?</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span> <span class="o">:</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">width</span><span class="o">;</span>
<span class="nx">elTd</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">overflow</span> <span class="o">=</span> <span class="s1">&#39;hidden&#39;</span><span class="o">;</span>
<span class="nx">elTd</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">width</span> <span class="o">=</span> <span class="nx">nWidth</span> <span class="o">+</span> <span class="s1">&#39;px&#39;</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">elTd</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Create a new TR element for a given Record and appends it with the correct</span>
<span class="c"> * number of Column-state-classed TD elements. Striping is the responsibility of</span>
<span class="c"> * the calling function, which may decide to stripe the single row, a subset of</span>
<span class="c"> * rows, or all the rows.</span>
<span class="c"> * @method _createTrEl</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance</span>
<span class="c"> * @return {HTMLElement} The new TR element. This must be added to the DOM.</span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_addTrEl</span> <span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTrTemplate</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getTrTemplateEl</span><span class="o">();</span>
<span class="c">// Clone the TR template.</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTr</span> <span class="o">=</span> <span class="nx">elTrTemplate</span><span class="o">.</span><span class="nx">cloneNode</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="c">// Populate content</span>
<span class="c"></span> <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_updateTrEl</span><span class="o">(</span><span class="nx">elTr</span><span class="o">,</span><span class="nx">oRecord</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Formats the contents of the given TR&#39;s TD elements with data from the given</span>
<span class="c"> * Record. Only innerHTML should change, nothing structural.</span>
<span class="c"> *</span>
<span class="c"> * @method _updateTrEl</span>
<span class="c"> * @param elTr {HTMLElement} The TR element to update.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} The associated Record instance.</span>
<span class="c"> * @return {HTMLElement} DOM reference to the new TR element.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_updateTrEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elTr</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">ok</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;formatRow&quot;</span><span class="o">)</span> <span class="o">?</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;formatRow&quot;</span><span class="o">)(</span><span class="nx">elTr</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">)</span> <span class="o">:</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">ok</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Hide the row to prevent constant reflows</span>
<span class="c"></span> <span class="nx">elTr</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s1">&#39;none&#39;</span><span class="o">;</span>
<span class="c">// Update TD elements with new data</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allTds</span> <span class="o">=</span> <span class="nx">elTr</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">,</span>
<span class="nx">elTd</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span><span class="nx">len</span><span class="o">=</span><span class="nx">allTds</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="o">++</span><span class="nx">i</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTd</span> <span class="o">=</span> <span class="nx">allTds</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="c">// Set the cell content</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">formatCell</span><span class="o">(</span><span class="nx">allTds</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">firstChild</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="c">// Redisplay the row for reflow</span>
<span class="c"></span> <span class="nx">elTr</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">elTr</span><span class="o">.</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">oRecord</span><span class="o">.</span><span class="nx">getId</span><span class="o">();</span> <span class="c">// Needed for Record association and tracking of FIRST/LAST</span>
<span class="c"></span> <span class="k">return</span> <span class="nx">elTr</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Deletes TR element by DOM reference or by DataTable page row index.</span>
<span class="c"> *</span>
<span class="c"> * @method _deleteTrEl</span>
<span class="c"> * @param row {HTMLElement | Number} TR element reference or Datatable page row index.</span>
<span class="c"> * @return {Boolean} Returns true if successful, else returns false.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_deleteTrEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">rowIndex</span><span class="o">;</span>
<span class="c">// Get page row index for the element</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">row</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">rowIndex</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">row</span><span class="o">).</span><span class="nx">sectionRowIndex</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">rowIndex</span> <span class="o">=</span> <span class="nx">row</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">rowIndex</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">rowIndex</span> <span class="o">&gt;</span> <span class="o">-</span><span class="m">2</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">rowIndex</span> <span class="o">&lt;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">.</span><span class="nx">length</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Cannot use tbody.deleteRow due to IE6 instability</span>
<span class="c"></span> <span class="c">//return this._elTbody.deleteRow(rowIndex);</span>
<span class="c"></span> <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">row</span><span class="o">));</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">// CSS/STATE FUNCTIONS</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Removes the class YAHOO.widget.DataTable.CLASS_FIRST from the first TR element</span>
<span class="c"> * of the DataTable page and updates internal tracker.</span>
<span class="c"> *</span>
<span class="c"> * @method _unsetFirstRow</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_unsetFirstRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">// Remove FIRST</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_sFirstTrId</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_sFirstTrId</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_FIRST</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_sFirstTrId</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Assigns the class YAHOO.widget.DataTable.CLASS_FIRST to the first TR element</span>
<span class="c"> * of the DataTable page and updates internal tracker.</span>
<span class="c"> *</span>
<span class="c"> * @method _setFirstRow</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_setFirstRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_unsetFirstRow</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">elTr</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getFirstTrEl</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTr</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Set FIRST</span>
<span class="c"></span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elTr</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_FIRST</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_sFirstTrId</span> <span class="o">=</span> <span class="nx">elTr</span><span class="o">.</span><span class="nx">id</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Removes the class YAHOO.widget.DataTable.CLASS_LAST from the last TR element</span>
<span class="c"> * of the DataTable page and updates internal tracker.</span>
<span class="c"> *</span>
<span class="c"> * @method _unsetLastRow</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_unsetLastRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">// Unassign previous class</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_sLastTrId</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_sLastTrId</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LAST</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_sLastTrId</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Assigns the class YAHOO.widget.DataTable.CLASS_LAST to the last TR element</span>
<span class="c"> * of the DataTable page and updates internal tracker.</span>
<span class="c"> *</span>
<span class="c"> * @method _setLastRow</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_setLastRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_unsetLastRow</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">elTr</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getLastTrEl</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTr</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Assign class</span>
<span class="c"></span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elTr</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LAST</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_sLastTrId</span> <span class="o">=</span> <span class="nx">elTr</span><span class="o">.</span><span class="nx">id</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Assigns the classes DT.CLASS_EVEN and DT.CLASS_ODD to one, many, or all TR elements.</span>
<span class="c"> *</span>
<span class="c"> * @method _setRowStripes</span>
<span class="c"> * @param row {HTMLElement | String | Number} (optional) HTML TR element reference</span>
<span class="c"> * or string ID, or page row index of where to start striping.</span>
<span class="c"> * @param range {Number} (optional) If given, how many rows to stripe, otherwise</span>
<span class="c"> * stripe all the rows until the end.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_setRowStripes</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">,</span> <span class="nx">range</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Default values stripe all rows</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">,</span>
<span class="nx">nStartIndex</span> <span class="o">=</span> <span class="m">0</span><span class="o">,</span>
<span class="nx">nEndIndex</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">,</span>
<span class="nx">aOdds</span> <span class="o">=</span> <span class="o">[],</span> <span class="nx">nOddIdx</span> <span class="o">=</span> <span class="m">0</span><span class="o">,</span>
<span class="nx">aEvens</span> <span class="o">=</span> <span class="o">[],</span> <span class="nx">nEvenIdx</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
<span class="c">// Stripe a subset</span>
<span class="c"></span> <span class="k">if</span><span class="o">((</span><span class="nx">row</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">row</span> <span class="o">!==</span> <span class="kc">undefined</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Validate given start row</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elStartRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elStartRow</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">nStartIndex</span> <span class="o">=</span> <span class="nx">elStartRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span><span class="o">;</span>
<span class="c">// Validate given range</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">range</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">range</span> <span class="o">&gt;</span> <span class="m">1</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">nEndIndex</span> <span class="o">=</span> <span class="nx">nStartIndex</span> <span class="o">+</span> <span class="nx">range</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="nx">nStartIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">nEndIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">i</span><span class="o">%</span><span class="m">2</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">aOdds</span><span class="o">[</span><span class="nx">nOddIdx</span><span class="o">++]</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">aEvens</span><span class="o">[</span><span class="nx">nEvenIdx</span><span class="o">++]</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">aOdds</span><span class="o">.</span><span class="nx">length</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">replaceClass</span><span class="o">(</span><span class="nx">aOdds</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_EVEN</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ODD</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">aEvens</span><span class="o">.</span><span class="nx">length</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">replaceClass</span><span class="o">(</span><span class="nx">aEvens</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ODD</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_EVEN</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Assigns the class DT.CLASS_SELECTED to TR and TD elements.</span>
<span class="c"> *</span>
<span class="c"> * @method _setSelections</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_setSelections</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">// Keep track of selected rows</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allSelectedRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getSelectedRows</span><span class="o">();</span>
<span class="c">// Keep track of selected cells</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allSelectedCells</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getSelectedCells</span><span class="o">();</span>
<span class="c">// Anything to select?</span>
<span class="c"></span> <span class="k">if</span><span class="o">((</span><span class="nx">allSelectedRows</span><span class="o">.</span><span class="nx">length</span><span class="o">&gt;</span><span class="m">0</span><span class="o">)</span> <span class="o">||</span> <span class="o">(</span><span class="nx">allSelectedCells</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oColumnSet</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">,</span>
<span class="nx">el</span><span class="o">;</span>
<span class="c">// Loop over each row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">allSelectedRows</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">el</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">allSelectedRows</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">el</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Loop over each cell</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">allSelectedCells</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">el</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">allSelectedCells</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">recordId</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">el</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">el</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">oColumnSet</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">allSelectedCells</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">columnKey</span><span class="o">).</span><span class="nx">getKeyIndex</span><span class="o">()],</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c">//</span>
<span class="c">// Private DOM Event Handlers</span>
<span class="c">//</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Validates minWidths whenever the render chain ends.</span>
<span class="c"> *</span>
<span class="c"> * @method _onRenderChainEnd</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onRenderChainEnd</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">// Hide loading message</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">hideTableMessage</span><span class="o">();</span>
<span class="c">// Show empty message</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">.</span><span class="nx">length</span> <span class="o">===</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">showTableMessage</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;MSG_EMPTY&quot;</span><span class="o">),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_EMPTY</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Execute in timeout thread to give implementers a chance</span>
<span class="c"></span> <span class="c">// to subscribe after the constructor</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oSelf</span> <span class="o">=</span> <span class="k">this</span><span class="o">;</span>
<span class="nx">setTimeout</span><span class="o">(</span><span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="nx">oSelf</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Init event</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_bInit</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">_bInit</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;initEvent&quot;</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Render event</span>
<span class="c"></span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;renderEvent&quot;</span><span class="o">);</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;refreshEvent&quot;</span><span class="o">);</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;DataTable rendered&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="c">// Post-render routine</span>
<span class="c"></span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">validateColumnWidths</span><span class="o">();</span>
<span class="c">// Post-render event</span>
<span class="c"></span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;postRenderEvent&quot;</span><span class="o">);</span>
<span class="c">/*if(YAHOO.example.Performance.trialStart) {</span>
<span class="c"> YAHOO.log((new Date()).getTime() - YAHOO.example.Performance.trialStart.getTime() + &quot; ms&quot;, &quot;time&quot;);</span>
<span class="c"> YAHOO.example.Performance.trialStart = null;</span>
<span class="c"> }*/</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Post-render routine executed&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span> <span class="m">0</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles click events on the DOCUMENT.</span>
<span class="c"> *</span>
<span class="c"> * @method _onDocumentClick</span>
<span class="c"> * @param e {HTMLEvent} The click event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onDocumentClick</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getTarget</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">isAncestor</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">,</span> <span class="nx">elTarget</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableBlurEvent&quot;</span><span class="o">);</span>
<span class="c">// Fires editorBlurEvent when click is not within the TABLE.</span>
<span class="c"></span> <span class="c">// For cases when click is within the TABLE, due to timing issues,</span>
<span class="c"></span> <span class="c">// the editorBlurEvent needs to get fired by the lower-level DOM click</span>
<span class="c"></span> <span class="c">// handlers below rather than by the TABLE click handler directly.</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">getContainerEl</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elContainer</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">getContainerEl</span><span class="o">();</span>
<span class="c">// Only if the click was not within the CellEditor container</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">isAncestor</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">,</span> <span class="nx">elTarget</span><span class="o">)</span> <span class="o">&amp;&amp;</span>
<span class="o">(</span><span class="nx">elContainer</span><span class="o">.</span><span class="nx">id</span> <span class="o">!==</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">id</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;blurEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">editor</span><span class="o">:</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">});</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Backward Compatibility</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">isActive</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Only if the click was not within the Cell Editor container</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">isAncestor</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">container</span><span class="o">,</span> <span class="nx">elTarget</span><span class="o">)</span> <span class="o">&amp;&amp;</span>
<span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">container</span><span class="o">.</span><span class="nx">id</span> <span class="o">!==</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">id</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorBlurEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">editor</span><span class="o">:</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">});</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles focus events on the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @method _onTableFocus</span>
<span class="c"> * @param e {HTMLEvent} The focus event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onTableFocus</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableFocusEvent&quot;</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles focus events on the THEAD element.</span>
<span class="c"> *</span>
<span class="c"> * @method _onTheadFocus</span>
<span class="c"> * @param e {HTMLEvent} The focus event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onTheadFocus</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadFocusEvent&quot;</span><span class="o">);</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableFocusEvent&quot;</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles focus events on the TBODY element.</span>
<span class="c"> *</span>
<span class="c"> * @method _onTbodyFocus</span>
<span class="c"> * @param e {HTMLEvent} The focus event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onTbodyFocus</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tbodyFocusEvent&quot;</span><span class="o">);</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableFocusEvent&quot;</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles mouseover events on the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @method _onTableMouseover</span>
<span class="c"> * @param e {HTMLEvent} The mouseover event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onTableMouseover</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getTarget</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">while</span><span class="o">(</span><span class="nx">elTarget</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elTag</span> <span class="o">!=</span> <span class="s2">&quot;table&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">switch</span><span class="o">(</span><span class="nx">elTag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">case</span> <span class="s2">&quot;body&quot;</span><span class="o">:</span>
<span class="k">return</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;a&quot;</span><span class="o">:</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;td&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;cellMouseoverEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;span&quot;</span><span class="o">:</span>
<span class="k">if</span><span class="o">(</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">hasClass</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LABEL</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadLabelMouseoverEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerLabelMouseoverEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;th&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadCellMouseoverEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerCellMouseoverEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;tr&quot;</span><span class="o">:</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">==</span> <span class="s2">&quot;thead&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadRowMouseoverEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerRowMouseoverEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowMouseoverEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">default</span><span class="o">:</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">bKeepBubbling</span> <span class="o">===</span> <span class="kc">false</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableMouseoverEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:(</span><span class="nx">elTarget</span> <span class="o">||</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">),</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles mouseout events on the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @method _onTableMouseout</span>
<span class="c"> * @param e {HTMLEvent} The mouseout event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onTableMouseout</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getTarget</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">while</span><span class="o">(</span><span class="nx">elTarget</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elTag</span> <span class="o">!=</span> <span class="s2">&quot;table&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">switch</span><span class="o">(</span><span class="nx">elTag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">case</span> <span class="s2">&quot;body&quot;</span><span class="o">:</span>
<span class="k">return</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;a&quot;</span><span class="o">:</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;td&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;cellMouseoutEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;span&quot;</span><span class="o">:</span>
<span class="k">if</span><span class="o">(</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">hasClass</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LABEL</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadLabelMouseoutEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerLabelMouseoutEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;th&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadCellMouseoutEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerCellMouseoutEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;tr&quot;</span><span class="o">:</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">==</span> <span class="s2">&quot;thead&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadRowMouseoutEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerRowMouseoutEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowMouseoutEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">default</span><span class="o">:</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">bKeepBubbling</span> <span class="o">===</span> <span class="kc">false</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableMouseoutEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:(</span><span class="nx">elTarget</span> <span class="o">||</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">),</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles mousedown events on the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @method _onTableMousedown</span>
<span class="c"> * @param e {HTMLEvent} The mousedown event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onTableMousedown</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getTarget</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">while</span><span class="o">(</span><span class="nx">elTarget</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elTag</span> <span class="o">!=</span> <span class="s2">&quot;table&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">switch</span><span class="o">(</span><span class="nx">elTag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">case</span> <span class="s2">&quot;body&quot;</span><span class="o">:</span>
<span class="k">return</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;a&quot;</span><span class="o">:</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;td&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;cellMousedownEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;span&quot;</span><span class="o">:</span>
<span class="k">if</span><span class="o">(</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">hasClass</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LABEL</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadLabelMousedownEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerLabelMousedownEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;th&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadCellMousedownEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerCellMousedownEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;tr&quot;</span><span class="o">:</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">==</span> <span class="s2">&quot;thead&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadRowMousedownEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerRowMousedownEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowMousedownEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">default</span><span class="o">:</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">bKeepBubbling</span> <span class="o">===</span> <span class="kc">false</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableMousedownEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:(</span><span class="nx">elTarget</span> <span class="o">||</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">),</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles mouseup events on the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @method _onTableMouseup</span>
<span class="c"> * @param e {HTMLEvent} The mouseup event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onTableMouseup</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getTarget</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">while</span><span class="o">(</span><span class="nx">elTarget</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elTag</span> <span class="o">!=</span> <span class="s2">&quot;table&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">switch</span><span class="o">(</span><span class="nx">elTag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">case</span> <span class="s2">&quot;body&quot;</span><span class="o">:</span>
<span class="k">return</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;a&quot;</span><span class="o">:</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;td&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;cellMouseupEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;span&quot;</span><span class="o">:</span>
<span class="k">if</span><span class="o">(</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">hasClass</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LABEL</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadLabelMouseupEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerLabelMouseupEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;th&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadCellMouseupEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerCellMouseupEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;tr&quot;</span><span class="o">:</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">==</span> <span class="s2">&quot;thead&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadRowMouseupEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerRowMouseupEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowMouseupEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">default</span><span class="o">:</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">bKeepBubbling</span> <span class="o">===</span> <span class="kc">false</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableMouseupEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:(</span><span class="nx">elTarget</span> <span class="o">||</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">),</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles dblclick events on the DataTable instance.</span>
<span class="c"> *</span>
<span class="c"> * @method _onTableDblclick</span>
<span class="c"> * @param e {HTMLEvent} The dblclick event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onTableDblclick</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getTarget</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">while</span><span class="o">(</span><span class="nx">elTarget</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elTag</span> <span class="o">!=</span> <span class="s2">&quot;table&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">switch</span><span class="o">(</span><span class="nx">elTag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">case</span> <span class="s2">&quot;body&quot;</span><span class="o">:</span>
<span class="k">return</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;td&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;cellDblclickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;span&quot;</span><span class="o">:</span>
<span class="k">if</span><span class="o">(</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">hasClass</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LABEL</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadLabelDblclickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerLabelDblclickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;th&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadCellDblclickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerCellDblclickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;tr&quot;</span><span class="o">:</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">==</span> <span class="s2">&quot;thead&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadRowDblclickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerRowDblclickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowDblclickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">default</span><span class="o">:</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">bKeepBubbling</span> <span class="o">===</span> <span class="kc">false</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableDblclickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:(</span><span class="nx">elTarget</span> <span class="o">||</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">),</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles keydown events on the THEAD element.</span>
<span class="c"> *</span>
<span class="c"> * @method _onTheadKeydown</span>
<span class="c"> * @param e {HTMLEvent} The key event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onTheadKeydown</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getTarget</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">while</span><span class="o">(</span><span class="nx">elTarget</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elTag</span> <span class="o">!=</span> <span class="s2">&quot;table&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">switch</span><span class="o">(</span><span class="nx">elTag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">case</span> <span class="s2">&quot;body&quot;</span><span class="o">:</span>
<span class="k">return</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;input&quot;</span><span class="o">:</span>
<span class="nx">case</span> <span class="s2">&quot;textarea&quot;</span><span class="o">:</span>
<span class="c">// TODO: implement textareaKeyEvent</span>
<span class="c"></span> <span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;thead&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadKeyEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">default</span><span class="o">:</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">bKeepBubbling</span> <span class="o">===</span> <span class="kc">false</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableKeyEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:(</span><span class="nx">elTarget</span> <span class="o">||</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">),</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles keydown events on the TBODY element. Handles selection behavior,</span>
<span class="c"> * provides hooks for ENTER to edit functionality.</span>
<span class="c"> *</span>
<span class="c"> * @method _onTbodyKeydown</span>
<span class="c"> * @param e {HTMLEvent} The key event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onTbodyKeydown</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">sMode</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;selectionMode&quot;</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;standard&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">_handleStandardSelectionByKey</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;single&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">_handleSingleSelectionByKey</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;cellblock&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">_handleCellBlockSelectionByKey</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;cellrange&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">_handleCellRangeSelectionByKey</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;singlecell&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">_handleSingleCellSelectionByKey</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;blurEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">editor</span><span class="o">:</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">isActive</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorBlurEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">editor</span><span class="o">:</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">});</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getTarget</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">while</span><span class="o">(</span><span class="nx">elTarget</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elTag</span> <span class="o">!=</span> <span class="s2">&quot;table&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">switch</span><span class="o">(</span><span class="nx">elTag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">case</span> <span class="s2">&quot;body&quot;</span><span class="o">:</span>
<span class="k">return</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;tbody&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tbodyKeyEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">default</span><span class="o">:</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">bKeepBubbling</span> <span class="o">===</span> <span class="kc">false</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableKeyEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:(</span><span class="nx">elTarget</span> <span class="o">||</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">),</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles keypress events on the TABLE. Mainly to support stopEvent on Mac.</span>
<span class="c"> *</span>
<span class="c"> * @method _onTableKeypress</span>
<span class="c"> * @param e {HTMLEvent} The key event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onTableKeypress</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">ua</span><span class="o">.</span><span class="nx">opera</span> <span class="o">||</span> <span class="o">(</span><span class="nx">navigator</span><span class="o">.</span><span class="nx">userAgent</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">().</span><span class="nx">indexOf</span><span class="o">(</span><span class="s2">&quot;mac&quot;</span><span class="o">)</span> <span class="o">!==</span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">ua</span><span class="o">.</span><span class="nx">webkit</span> <span class="o">&lt;</span> <span class="m">420</span><span class="o">))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nKey</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getCharCode</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="c">// arrow down</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">40</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">stopEvent</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// arrow up</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">38</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">stopEvent</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles click events on the THEAD element.</span>
<span class="c"> *</span>
<span class="c"> * @method _onTheadClick</span>
<span class="c"> * @param e {HTMLEvent} The click event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onTheadClick</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// This blurs the CellEditor</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;blurEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">editor</span><span class="o">:</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">});</span>
<span class="o">}</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">isActive</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorBlurEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">editor</span><span class="o">:</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">});</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getTarget</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">while</span><span class="o">(</span><span class="nx">elTarget</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elTag</span> <span class="o">!=</span> <span class="s2">&quot;table&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">switch</span><span class="o">(</span><span class="nx">elTag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">case</span> <span class="s2">&quot;body&quot;</span><span class="o">:</span>
<span class="k">return</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;input&quot;</span><span class="o">:</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">.</span><span class="nx">type</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">==</span> <span class="s2">&quot;checkbox&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadCheckboxClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">.</span><span class="nx">type</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">==</span> <span class="s2">&quot;radio&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadRadioClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;a&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadLinkClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;button&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadButtonClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;span&quot;</span><span class="o">:</span>
<span class="k">if</span><span class="o">(</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">hasClass</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LABEL</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadLabelClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerLabelClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;th&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadCellClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerCellClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;tr&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;theadRowClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;headerRowClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">default</span><span class="o">:</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">bKeepBubbling</span> <span class="o">===</span> <span class="kc">false</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:(</span><span class="nx">elTarget</span> <span class="o">||</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">),</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles click events on the primary TBODY element.</span>
<span class="c"> *</span>
<span class="c"> * @method _onTbodyClick</span>
<span class="c"> * @param e {HTMLEvent} The click event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onTbodyClick</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// This blurs the CellEditor</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;blurEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">editor</span><span class="o">:</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">isActive</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorBlurEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">editor</span><span class="o">:</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">});</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Fire Custom Events</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getTarget</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">while</span><span class="o">(</span><span class="nx">elTarget</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elTag</span> <span class="o">!=</span> <span class="s2">&quot;table&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">switch</span><span class="o">(</span><span class="nx">elTag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">case</span> <span class="s2">&quot;body&quot;</span><span class="o">:</span>
<span class="k">return</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;input&quot;</span><span class="o">:</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">.</span><span class="nx">type</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">==</span> <span class="s2">&quot;checkbox&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;checkboxClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">.</span><span class="nx">type</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">==</span> <span class="s2">&quot;radio&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;radioClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;a&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;linkClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;button&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;buttonClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;td&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;cellClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;tr&quot;</span><span class="o">:</span>
<span class="nx">bKeepBubbling</span> <span class="o">=</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">,</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">default</span><span class="o">:</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">bKeepBubbling</span> <span class="o">===</span> <span class="kc">false</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTag</span> <span class="o">=</span> <span class="nx">elTarget</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableClickEvent&quot;</span><span class="o">,{</span><span class="nx">target</span><span class="o">:(</span><span class="nx">elTarget</span> <span class="o">||</span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">),</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Handles change events on SELECT elements within DataTable.</span>
<span class="c"> *</span>
<span class="c"> * @method _onDropdownChange</span>
<span class="c"> * @param e {HTMLEvent} The change event.</span>
<span class="c"> * @param oSelf {YAHOO.wiget.DataTable} DataTable instance.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_onDropdownChange</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getTarget</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;dropdownChangeEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">,</span> <span class="nx">target</span><span class="o">:</span><span class="nx">elTarget</span><span class="o">});</span>
<span class="o">},</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c">//</span>
<span class="c">// Public member variables</span>
<span class="c">//</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c">/**</span>
<span class="c"> * Returns object literal of initial configs.</span>
<span class="c"> *</span>
<span class="c"> * @property configs</span>
<span class="c"> * @type Object</span>
<span class="c"> * @default {} </span>
<span class="c"> */</span>
<span class="nx">configs</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c">//</span>
<span class="c">// Public methods</span>
<span class="c">//</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Returns unique id assigned to instance, which is a useful prefix for</span>
<span class="c"> * generating unique DOM ID strings.</span>
<span class="c"> *</span>
<span class="c"> * @method getId</span>
<span class="c"> * @return {String} Unique ID of the DataSource instance.</span>
<span class="c"> */</span>
<span class="nx">getId</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * DataSource instance name, for logging.</span>
<span class="c"> *</span>
<span class="c"> * @method toString</span>
<span class="c"> * @return {String} Unique name of the DataSource instance.</span>
<span class="c"> */</span>
<span class="nx">toString</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="s2">&quot;DataTable instance &quot;</span> <span class="o">+</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns the DataTable instance&#39;s DataSource instance.</span>
<span class="c"> *</span>
<span class="c"> * @method getDataSource</span>
<span class="c"> * @return {YAHOO.util.DataSource} DataSource instance.</span>
<span class="c"> */</span>
<span class="nx">getDataSource</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oDataSource</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns the DataTable instance&#39;s ColumnSet instance.</span>
<span class="c"> *</span>
<span class="c"> * @method getColumnSet</span>
<span class="c"> * @return {YAHOO.widget.ColumnSet} ColumnSet instance.</span>
<span class="c"> */</span>
<span class="nx">getColumnSet</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns the DataTable instance&#39;s RecordSet instance.</span>
<span class="c"> *</span>
<span class="c"> * @method getRecordSet</span>
<span class="c"> * @return {YAHOO.widget.RecordSet} RecordSet instance.</span>
<span class="c"> */</span>
<span class="nx">getRecordSet</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns on object literal representing the DataTable instance&#39;s current</span>
<span class="c"> * state with the following properties:</span>
<span class="c"> * &lt;dl&gt;</span>
<span class="c"> * &lt;dt&gt;pagination&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;Instance of YAHOO.widget.Paginator&lt;/dd&gt;</span>
<span class="c"> *</span>
<span class="c"> * &lt;dt&gt;sortedBy&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;</span>
<span class="c"> * &lt;dl&gt;</span>
<span class="c"> * &lt;dt&gt;sortedBy.key&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;{String} Key of sorted Column&lt;/dd&gt;</span>
<span class="c"> * &lt;dt&gt;sortedBy.dir&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;{String} Initial sort direction, either YAHOO.widget.DataTable.CLASS_ASC or YAHOO.widget.DataTable.CLASS_DESC&lt;/dd&gt;</span>
<span class="c"> * &lt;/dl&gt;</span>
<span class="c"> * &lt;/dd&gt;</span>
<span class="c"> *</span>
<span class="c"> * &lt;dt&gt;selectedRows&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;Array of selected rows by Record ID.&lt;/dd&gt;</span>
<span class="c"> *</span>
<span class="c"> * &lt;dt&gt;selectedCells&lt;/dt&gt;</span>
<span class="c"> * &lt;dd&gt;Selected cells as an array of object literals:</span>
<span class="c"> * {recordId:sRecordId, columnKey:sColumnKey}&lt;/dd&gt;</span>
<span class="c"> * &lt;/dl&gt;</span>
<span class="c"> * </span>
<span class="c"> * @method getState</span>
<span class="c"> * @return {Object} DataTable instance state object literal values.</span>
<span class="c"> */</span>
<span class="nx">getState</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="o">{</span>
<span class="nx">totalRecords</span><span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">)</span> <span class="o">?</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">).</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;totalRecords&quot;</span><span class="o">)</span> <span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getLength</span><span class="o">(),</span>
<span class="nx">pagination</span><span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;paginator&quot;</span><span class="o">)</span> <span class="o">?</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;paginator&quot;</span><span class="o">).</span><span class="nx">getState</span><span class="o">()</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="nx">sortedBy</span><span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;sortedBy&quot;</span><span class="o">),</span>
<span class="nx">selectedRows</span><span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">getSelectedRows</span><span class="o">(),</span>
<span class="nx">selectedCells</span><span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">getSelectedCells</span><span class="o">()</span>
<span class="o">};</span>
<span class="o">},</span>
<span class="c">// DOM ACCESSORS</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the DataTable&#39;s container element.</span>
<span class="c"> *</span>
<span class="c"> * @method getContainerEl</span>
<span class="c"> * @return {HTMLElement} Reference to DIV element.</span>
<span class="c"> */</span>
<span class="nx">getContainerEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the DataTable&#39;s TABLE element.</span>
<span class="c"> *</span>
<span class="c"> * @method getTableEl</span>
<span class="c"> * @return {HTMLElement} Reference to TABLE element.</span>
<span class="c"> */</span>
<span class="nx">getTableEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the DataTable&#39;s THEAD element.</span>
<span class="c"> *</span>
<span class="c"> * @method getTheadEl</span>
<span class="c"> * @return {HTMLElement} Reference to THEAD element.</span>
<span class="c"> */</span>
<span class="nx">getTheadEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the DataTable&#39;s primary TBODY element.</span>
<span class="c"> *</span>
<span class="c"> * @method getTbodyEl</span>
<span class="c"> * @return {HTMLElement} Reference to TBODY element.</span>
<span class="c"> */</span>
<span class="nx">getTbodyEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the DataTable&#39;s secondary TBODY element that is</span>
<span class="c"> * used to display messages.</span>
<span class="c"> *</span>
<span class="c"> * @method getMsgTbodyEl</span>
<span class="c"> * @return {HTMLElement} Reference to TBODY element.</span>
<span class="c"> */</span>
<span class="nx">getMsgTbodyEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elMsgTbody</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the TD element within the secondary TBODY that is</span>
<span class="c"> * used to display messages.</span>
<span class="c"> *</span>
<span class="c"> * @method getMsgTdEl</span>
<span class="c"> * @return {HTMLElement} Reference to TD element.</span>
<span class="c"> */</span>
<span class="nx">getMsgTdEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elMsgTd</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns the corresponding TR reference for a given DOM element, ID string or</span>
<span class="c"> * directly page row index. If the given identifier is a child of a TR element,</span>
<span class="c"> * then DOM tree is traversed until a parent TR element is returned, otherwise</span>
<span class="c"> * null.</span>
<span class="c"> *</span>
<span class="c"> * @method getTrEl</span>
<span class="c"> * @param row {HTMLElement | String | Number | YAHOO.widget.Record} Which row to</span>
<span class="c"> * get: by element reference, ID string, page row index, or Record.</span>
<span class="c"> * @return {HTMLElement} Reference to TR element, or null.</span>
<span class="c"> */</span>
<span class="nx">getTrEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// By Record</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">row</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Record</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nb">document</span><span class="o">.</span><span class="nx">getElementById</span><span class="o">(</span><span class="nx">row</span><span class="o">.</span><span class="nx">getId</span><span class="o">());</span>
<span class="o">}</span>
<span class="c">// By page row index</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">row</span><span class="o">))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">return</span> <span class="o">((</span><span class="nx">row</span> <span class="o">&gt;</span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">row</span> <span class="o">&lt;</span> <span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">))</span> <span class="o">?</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">row</span><span class="o">]</span> <span class="o">:</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// By ID string or element reference</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elRow</span> <span class="o">=</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">row</span><span class="o">))</span> <span class="o">?</span> <span class="nb">document</span><span class="o">.</span><span class="nx">getElementById</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">:</span> <span class="nx">row</span><span class="o">;</span>
<span class="c">// Validate HTML element</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elRow</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elRow</span><span class="o">.</span><span class="nx">ownerDocument</span> <span class="o">==</span> <span class="nb">document</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Validate TR element</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elRow</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">!=</span> <span class="s2">&quot;tr&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Traverse up the DOM to find the corresponding TR element</span>
<span class="c"></span> <span class="nx">elRow</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">getAncestorByTagName</span><span class="o">(</span><span class="nx">elRow</span><span class="o">,</span><span class="s2">&quot;tr&quot;</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Make sure the TR is in this TBODY</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elRow</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elRow</span><span class="o">.</span><span class="nx">parentNode</span> <span class="o">==</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Now we can return the TR element</span>
<span class="c"></span> <span class="k">return</span> <span class="nx">elRow</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the first TR element in the DataTable page, or null.</span>
<span class="c"> *</span>
<span class="c"> * @method getFirstTrEl</span>
<span class="c"> * @return {HTMLElement} Reference to TR element.</span>
<span class="c"> */</span>
<span class="nx">getFirstTrEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">[</span><span class="m">0</span><span class="o">]</span> <span class="o">||</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the last TR element in the DataTable page, or null.</span>
<span class="c"> *</span>
<span class="c"> * @method getLastTrEl</span>
<span class="c"> * @return {HTMLElement} Reference to last TR element.</span>
<span class="c"> */</span>
<span class="nx">getLastTrEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">]</span> <span class="o">||</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the next TR element from the given TR element, or null.</span>
<span class="c"> *</span>
<span class="c"> * @method getNextTrEl</span>
<span class="c"> * @param row {HTMLElement | String | Number | YAHOO.widget.Record} Element</span>
<span class="c"> * reference, ID string, page row index, or Record from which to get next TR element.</span>
<span class="c"> * @return {HTMLElement} Reference to next TR element.</span>
<span class="c"> */</span>
<span class="nx">getNextTrEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nThisTrIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">nThisTrIndex</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">nThisTrIndex</span> <span class="o">&lt;</span> <span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">nThisTrIndex</span><span class="o">+</span><span class="m">1</span><span class="o">];</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not get next TR element for row &quot;</span> <span class="o">+</span> <span class="nx">row</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the previous TR element from the given TR element, or null.</span>
<span class="c"> *</span>
<span class="c"> * @method getPreviousTrEl</span>
<span class="c"> * @param row {HTMLElement | String | Number | YAHOO.widget.Record} Element</span>
<span class="c"> * reference, ID string, page row index, or Record from which to get previous TR element.</span>
<span class="c"> * @return {HTMLElement} Reference to previous TR element.</span>
<span class="c"> */</span>
<span class="nx">getPreviousTrEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nThisTrIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">nThisTrIndex</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">nThisTrIndex</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">nThisTrIndex</span><span class="o">-</span><span class="m">1</span><span class="o">];</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not get previous TR element for row &quot;</span> <span class="o">+</span> <span class="nx">row</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to a TD liner element.</span>
<span class="c"> *</span>
<span class="c"> * @method getTdLinerEl</span>
<span class="c"> * @param cell {HTMLElement | Object} TD element or child of a TD element, or</span>
<span class="c"> * object literal of syntax {record:oRecord, column:oColumn}.</span>
<span class="c"> * @return {HTMLElement} Reference to TD liner element.</span>
<span class="c"> */</span>
<span class="nx">getTdLinerEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">cell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">cell</span><span class="o">);</span>
<span class="k">return</span> <span class="nx">elCell</span><span class="o">.</span><span class="nx">firstChild</span> <span class="o">||</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to a TD element.</span>
<span class="c"> *</span>
<span class="c"> * @method getTdEl</span>
<span class="c"> * @param cell {HTMLElement | String | Object} TD element or child of a TD element, or</span>
<span class="c"> * object literal of syntax {record:oRecord, column:oColumn}.</span>
<span class="c"> * @return {HTMLElement} Reference to TD element.</span>
<span class="c"> */</span>
<span class="nx">getTdEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">cell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elCell</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">el</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">cell</span><span class="o">);</span>
<span class="c">// Validate HTML element</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">el</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">el</span><span class="o">.</span><span class="nx">ownerDocument</span> <span class="o">==</span> <span class="nb">document</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Validate TD element</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">el</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">!=</span> <span class="s2">&quot;td&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Traverse up the DOM to find the corresponding TR element</span>
<span class="c"></span> <span class="nx">elCell</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">getAncestorByTagName</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span> <span class="s2">&quot;td&quot;</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elCell</span> <span class="o">=</span> <span class="nx">el</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Make sure the TD is in this TBODY</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elCell</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">parentNode</span> <span class="o">==</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Now we can return the TD element</span>
<span class="c"></span> <span class="k">return</span> <span class="nx">elCell</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">cell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">nColKeyIndex</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">cell</span><span class="o">.</span><span class="nx">columnKey</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">cell</span><span class="o">.</span><span class="nx">recordId</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">cell</span><span class="o">.</span><span class="nx">recordId</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">cell</span><span class="o">.</span><span class="nx">columnKey</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">nColKeyIndex</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">cell</span><span class="o">.</span><span class="nx">record</span> <span class="o">&amp;&amp;</span> <span class="nx">cell</span><span class="o">.</span><span class="nx">column</span> <span class="o">&amp;&amp;</span> <span class="nx">cell</span><span class="o">.</span><span class="nx">column</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oRecord</span> <span class="o">=</span> <span class="nx">cell</span><span class="o">.</span><span class="nx">record</span><span class="o">;</span>
<span class="nx">nColKeyIndex</span> <span class="o">=</span> <span class="nx">cell</span><span class="o">.</span><span class="nx">column</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">var</span> <span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">);</span>
<span class="k">if</span><span class="o">((</span><span class="nx">nColKeyIndex</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="nx">elRow</span> <span class="o">&amp;&amp;</span> <span class="nx">elRow</span><span class="o">.</span><span class="nx">cells</span> <span class="o">&amp;&amp;</span> <span class="nx">elRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">elRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">nColKeyIndex</span><span class="o">]</span> <span class="o">||</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the first TD element in the DataTable page (by default),</span>
<span class="c"> * the first TD element of the optionally given row, or null.</span>
<span class="c"> *</span>
<span class="c"> * @method getFirstTdEl</span>
<span class="c"> * @param row {HTMLElement} (optional) row from which to get first TD</span>
<span class="c"> * @return {HTMLElement} Reference to TD element.</span>
<span class="c"> */</span>
<span class="nx">getFirstTdEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">getFirstTrEl</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elRow</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">))</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">elRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="m">0</span><span class="o">];</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not get first TD element for row &quot;</span> <span class="o">+</span> <span class="nx">elRow</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the last TD element in the DataTable page (by default),</span>
<span class="c"> * the first TD element of the optionally given row, or null.</span>
<span class="c"> *</span>
<span class="c"> * @method getLastTdEl</span>
<span class="c"> * @return {HTMLElement} Reference to last TD element.</span>
<span class="c"> */</span>
<span class="nx">getLastTdEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">getLastTrEl</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elRow</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">))</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">elRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">elRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">];</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not get last TD element for row &quot;</span> <span class="o">+</span> <span class="nx">elRow</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the next TD element from the given cell, or null.</span>
<span class="c"> *</span>
<span class="c"> * @method getNextTdEl</span>
<span class="c"> * @param cell {HTMLElement | String | Object} DOM element reference or string ID, or</span>
<span class="c"> * object literal of syntax {record:oRecord, column:oColumn} from which to get next TD element.</span>
<span class="c"> * @return {HTMLElement} Reference to next TD element, or null.</span>
<span class="c"> */</span>
<span class="nx">getNextTdEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">cell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">cell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nThisTdIndex</span> <span class="o">=</span> <span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">nThisTdIndex</span> <span class="o">&lt;</span> <span class="nx">elRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">elRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">nThisTdIndex</span><span class="o">+</span><span class="m">1</span><span class="o">];</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elNextRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getNextTrEl</span><span class="o">(</span><span class="nx">elRow</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elNextRow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">elNextRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="m">0</span><span class="o">];</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not get next TD element for cell &quot;</span> <span class="o">+</span> <span class="nx">cell</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the previous TD element from the given cell, or null.</span>
<span class="c"> *</span>
<span class="c"> * @method getPreviousTdEl</span>
<span class="c"> * @param cell {HTMLElement | String | Object} DOM element reference or string ID, or</span>
<span class="c"> * object literal of syntax {record:oRecord, column:oColumn} from which to get previous TD element.</span>
<span class="c"> * @return {HTMLElement} Reference to previous TD element, or null.</span>
<span class="c"> */</span>
<span class="nx">getPreviousTdEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">cell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">cell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nThisTdIndex</span> <span class="o">=</span> <span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">nThisTdIndex</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">elRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">nThisTdIndex</span><span class="o">-</span><span class="m">1</span><span class="o">];</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elPreviousRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getPreviousTrEl</span><span class="o">(</span><span class="nx">elRow</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elPreviousRow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">getLastTdEl</span><span class="o">(</span><span class="nx">elPreviousRow</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not get next TD element for cell &quot;</span> <span class="o">+</span> <span class="nx">cell</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the above TD element from the given cell, or null.</span>
<span class="c"> *</span>
<span class="c"> * @method getAboveTdEl</span>
<span class="c"> * @param cell {HTMLElement | String | Object} DOM element reference or string ID, or</span>
<span class="c"> * object literal of syntax {record:oRecord, column:oColumn} from which to get next TD element.</span>
<span class="c"> * @return {HTMLElement} Reference to next TD element, or null.</span>
<span class="c"> */</span>
<span class="nx">getAboveTdEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">cell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">cell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elPreviousRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getPreviousTrEl</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elPreviousRow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">elPreviousRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">];</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not get above TD element for cell &quot;</span> <span class="o">+</span> <span class="nx">cell</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to the below TD element from the given cell, or null.</span>
<span class="c"> *</span>
<span class="c"> * @method getBelowTdEl</span>
<span class="c"> * @param cell {HTMLElement | String | Object} DOM element reference or string ID, or</span>
<span class="c"> * object literal of syntax {record:oRecord, column:oColumn} from which to get previous TD element.</span>
<span class="c"> * @return {HTMLElement} Reference to previous TD element, or null.</span>
<span class="c"> */</span>
<span class="nx">getBelowTdEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">cell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">cell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elNextRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getNextTrEl</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elNextRow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">elNextRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">];</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not get below TD element for cell &quot;</span> <span class="o">+</span> <span class="nx">cell</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to a TH liner element. Needed to normalize for resizeable </span>
<span class="c"> * Columns, which have an additional resizer liner DIV element between the TH</span>
<span class="c"> * element and the liner DIV element. </span>
<span class="c"> *</span>
<span class="c"> * @method getThLinerEl</span>
<span class="c"> * @param theadCell {YAHOO.widget.Column | HTMLElement | String} Column instance,</span>
<span class="c"> * DOM element reference, or string ID.</span>
<span class="c"> * @return {HTMLElement} Reference to TH liner element.</span>
<span class="c"> */</span>
<span class="nx">getThLinerEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">theadCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">theadCell</span><span class="o">);</span>
<span class="k">return</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getThLinerEl</span><span class="o">()</span> <span class="o">:</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns DOM reference to a TH element.</span>
<span class="c"> *</span>
<span class="c"> * @method getThEl</span>
<span class="c"> * @param theadCell {YAHOO.widget.Column | HTMLElement | String} Column instance,</span>
<span class="c"> * DOM element reference, or string ID.</span>
<span class="c"> * @return {HTMLElement} Reference to TH element.</span>
<span class="c"> */</span>
<span class="nx">getThEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">theadCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTh</span><span class="o">;</span>
<span class="c">// Validate Column instance</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">theadCell</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Column</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oColumn</span> <span class="o">=</span> <span class="nx">theadCell</span><span class="o">;</span>
<span class="nx">elTh</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTh</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">elTh</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Validate HTML element</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">el</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">theadCell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">el</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">el</span><span class="o">.</span><span class="nx">ownerDocument</span> <span class="o">==</span> <span class="nb">document</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Validate TH element</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">el</span><span class="o">.</span><span class="nx">nodeName</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">!=</span> <span class="s2">&quot;th&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Traverse up the DOM to find the corresponding TR element</span>
<span class="c"></span> <span class="nx">elTh</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">getAncestorByTagName</span><span class="o">(</span><span class="nx">el</span><span class="o">,</span><span class="s2">&quot;th&quot;</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elTh</span> <span class="o">=</span> <span class="nx">el</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Make sure the TH is in this THEAD</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elTh</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elTh</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">parentNode</span> <span class="o">==</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Now we can return the TD element</span>
<span class="c"></span> <span class="k">return</span> <span class="nx">elTh</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns the page row index of given row. Returns null if the row is not on the</span>
<span class="c"> * current DataTable page.</span>
<span class="c"> *</span>
<span class="c"> * @method getTrIndex</span>
<span class="c"> * @param row {HTMLElement | String | YAHOO.widget.Record | Number} DOM or ID</span>
<span class="c"> * string reference to an element within the DataTable page, a Record instance,</span>
<span class="c"> * or a Record&#39;s RecordSet index.</span>
<span class="c"> * @return {Number} Page row index, or null if row does not exist or is not on current page.</span>
<span class="c"> */</span>
<span class="nx">getTrIndex</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nRecordIndex</span><span class="o">;</span>
<span class="c">// By Record</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">row</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Record</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">nRecordIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">nRecordIndex</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Not a valid Record</span>
<span class="c"></span> <span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Calculate page row index from Record index</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">row</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">nRecordIndex</span> <span class="o">=</span> <span class="nx">row</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">nRecordIndex</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Validate the number</span>
<span class="c"></span> <span class="k">if</span><span class="o">((</span><span class="nx">nRecordIndex</span> <span class="o">&gt;</span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">nRecordIndex</span> <span class="o">&lt;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getLength</span><span class="o">()))</span> <span class="o">{</span>
<span class="c">// DataTable is paginated</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oPaginator</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oPaginator</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Check the record index is within the indices of the</span>
<span class="c"></span> <span class="c">// current page</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">rng</span> <span class="o">=</span> <span class="nx">oPaginator</span><span class="o">.</span><span class="nx">getPageRecords</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">rng</span> <span class="o">&amp;&amp;</span> <span class="nx">nRecordIndex</span> <span class="o">&gt;=</span> <span class="nx">rng</span><span class="o">[</span><span class="m">0</span><span class="o">]</span> <span class="o">&amp;&amp;</span> <span class="nx">nRecordIndex</span> <span class="o">&lt;=</span> <span class="nx">rng</span><span class="o">[</span><span class="m">1</span><span class="o">])</span> <span class="o">{</span>
<span class="c">// This Record is on current page</span>
<span class="c"></span> <span class="k">return</span> <span class="nx">nRecordIndex</span> <span class="o">-</span> <span class="nx">rng</span><span class="o">[</span><span class="m">0</span><span class="o">];</span>
<span class="o">}</span>
<span class="c">// This Record is not on current page</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Not paginated, just return the Record index</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">nRecordIndex</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// RecordSet index is out of range</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// By element reference or ID string</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Validate TR element</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elRow</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elRow</span><span class="o">.</span><span class="nx">ownerDocument</span> <span class="o">==</span> <span class="nb">document</span><span class="o">)</span> <span class="o">&amp;&amp;</span>
<span class="o">(</span><span class="nx">elRow</span><span class="o">.</span><span class="nx">parentNode</span> <span class="o">==</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">))</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">elRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not get page row index for row &quot;</span> <span class="o">+</span> <span class="nx">row</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">// TABLE FUNCTIONS</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Resets a RecordSet with the given data and populates the page view</span>
<span class="c"> * with the new data. Any previous data, and selection and sort states are</span>
<span class="c"> * cleared. New data should be added as a separate step. </span>
<span class="c"> *</span>
<span class="c"> * @method initializeTable</span>
<span class="c"> */</span>
<span class="nx">initializeTable</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">// Reset init flag</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_bInit</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="c">// Clear the RecordSet</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">reset</span><span class="o">();</span>
<span class="c">// Clear the Paginator&#39;s totalRecords if paginating</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">pag</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">pag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">pag</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;totalRecords&#39;</span><span class="o">,</span><span class="m">0</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Clear selections</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_unselectAllTrEls</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_unselectAllTdEls</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorRecord</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="c">// Clear sort</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s2">&quot;sortedBy&quot;</span><span class="o">,</span> <span class="kc">null</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Internal wrapper calls run() on render Chain instance.</span>
<span class="c"> *</span>
<span class="c"> * @method _runRenderChain</span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_runRenderChain</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">run</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Renders the view with existing Records from the RecordSet while</span>
<span class="c"> * maintaining sort, pagination, and selection states. For performance, reuses</span>
<span class="c"> * existing DOM elements when possible while deleting extraneous elements.</span>
<span class="c"> *</span>
<span class="c"> * @method render</span>
<span class="c"> */</span>
<span class="nx">render</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">//YAHOO.example.Performance.trialStart = new Date();</span>
<span class="c"></span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">stop</span><span class="o">();</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;DataTable rendering...&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">var</span> <span class="nx">i</span><span class="o">,</span> <span class="nx">j</span><span class="o">,</span> <span class="nx">k</span><span class="o">,</span> <span class="nx">len</span><span class="o">,</span> <span class="nx">allRecords</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">oPaginator</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">);</span>
<span class="c">// Paginator is enabled, show a subset of Records and update Paginator UI</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oPaginator</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">allRecords</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecords</span><span class="o">(</span>
<span class="nx">oPaginator</span><span class="o">.</span><span class="nx">getStartIndex</span><span class="o">(),</span>
<span class="nx">oPaginator</span><span class="o">.</span><span class="nx">getRowsPerPage</span><span class="o">());</span>
<span class="o">}</span>
<span class="c">// Not paginated, show all records</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">allRecords</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecords</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">/* NEW METHOD */</span>
<span class="c">// From the top, update in-place existing rows, so as to reuse DOM elements</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTbody</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">,</span>
<span class="nx">loopN</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;renderLoopSize&quot;</span><span class="o">),</span>
<span class="nx">nRecordsLength</span> <span class="o">=</span> <span class="nx">allRecords</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span>
<span class="c">// Table has rows</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">nRecordsLength</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// So you don&#39;t see the borders in random places</span>
<span class="c"></span> <span class="c">//this._unsetFirstRow();</span>
<span class="c"></span> <span class="c">//this._unsetLastRow();</span>
<span class="c"></span>
<span class="nx">elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="k">while</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">.</span><span class="nx">lastChild</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTbody</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">.</span><span class="nx">lastChild</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="c">// Set up the loop Chain to render rows</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRecord</span><span class="o">,</span>
<span class="nx">endRecordIndex</span> <span class="o">=</span> <span class="o">((</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRecord</span><span class="o">+</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">nLoopLength</span><span class="o">)</span> <span class="o">&gt;</span> <span class="nx">nRecordsLength</span><span class="o">)</span> <span class="o">?</span>
<span class="nx">nRecordsLength</span> <span class="o">:</span> <span class="o">(</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRecord</span><span class="o">+</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">nLoopLength</span><span class="o">),</span>
<span class="nx">elRow</span><span class="o">,</span> <span class="nx">nextSibling</span><span class="o">;</span>
<span class="nx">elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="k">for</span><span class="o">(;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">endRecordIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">elRow</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">allRecords</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">getId</span><span class="o">());</span>
<span class="nx">elRow</span> <span class="o">=</span> <span class="nx">elRow</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">_addTrEl</span><span class="o">(</span><span class="nx">allRecords</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="nx">nextSibling</span> <span class="o">=</span> <span class="nx">elTbody</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">i</span><span class="o">]</span> <span class="o">||</span> <span class="kc">null</span><span class="o">;</span>
<span class="nx">elTbody</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nx">elRow</span><span class="o">,</span> <span class="nx">nextSibling</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="c">// Set up for the next loop</span>
<span class="c"></span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRecord</span> <span class="o">=</span> <span class="nx">i</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">iterations</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">ceil</span><span class="o">(</span><span class="nx">nRecordsLength</span><span class="o">/</span><span class="nx">loopN</span><span class="o">)</span> <span class="o">:</span> <span class="m">1</span><span class="o">,</span>
<span class="nx">argument</span><span class="o">:</span> <span class="o">{</span>
<span class="nx">nCurrentRecord</span><span class="o">:</span> <span class="m">0</span><span class="o">,</span><span class="c">//nRecordsLength-1, // Start at first Record</span>
<span class="c"></span> <span class="nx">nLoopLength</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="nx">loopN</span> <span class="o">:</span> <span class="nx">nRecordsLength</span>
<span class="o">},</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="m">0</span> <span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="c">// Post-render tasks</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">while</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="nx">nRecordsLength</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elTbody</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">elTbody</span><span class="o">.</span><span class="nx">lastChild</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setFirstRow</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setLastRow</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setRowStripes</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setSelections</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="m">0</span> <span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="c">// Fire events in separate timeout thread so implementers can</span>
<span class="c"></span> <span class="c">// subscribe immediately after the constructor</span>
<span class="c"></span> <span class="c">/*this._oChainRender.add({</span>
<span class="c"> method: function(oArg) {</span>
<span class="c"> if((this instanceof DT) &amp;&amp; this._sId) {</span>
<span class="c"> // Fire initEvent for first render</span>
<span class="c"> if(this._bInit) {</span>
<span class="c"> this._bInit = false;</span>
<span class="c"> this.fireEvent(&quot;initEvent&quot;);</span>
<span class="c"> }</span>
<span class="c"></span>
<span class="c"> // Always fire renderEvent</span>
<span class="c"> this.fireEvent(&quot;renderEvent&quot;);</span>
<span class="c"> // Backward compatibility</span>
<span class="c"> this.fireEvent(&quot;refreshEvent&quot;);</span>
<span class="c"> YAHOO.log(&quot;DataTable rendered &quot; + nRecordsLength + &quot; of &quot; + this._oRecordSet.getLength() + &quot; rows&quot;, &quot;info&quot;, this.toString());</span>
<span class="c"> </span>
<span class="c"> //YAHOO.log(&quot;end render&quot;,&quot;time&quot;);</span>
<span class="c"> }</span>
<span class="c"> },</span>
<span class="c"> scope: this</span>
<span class="c"> });*/</span>
<span class="o">}</span>
<span class="c">// Table has no rows</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Set up the loop Chain to delete rows</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">nTotal</span> <span class="o">=</span> <span class="nx">elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrent</span><span class="o">,</span>
<span class="nx">loopN</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">nLoopLength</span><span class="o">,</span>
<span class="nx">nIterEnd</span> <span class="o">=</span> <span class="o">(</span><span class="nx">i</span> <span class="o">-</span> <span class="nx">loopN</span> <span class="o">&lt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="o">-</span><span class="m">1</span> <span class="o">:</span> <span class="nx">i</span> <span class="o">-</span> <span class="nx">loopN</span><span class="o">;</span>
<span class="nx">elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="k">for</span><span class="o">(;</span> <span class="nx">i</span><span class="o">&gt;</span><span class="nx">nIterEnd</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="nx">elTbody</span><span class="o">.</span><span class="nx">deleteRow</span><span class="o">(-</span><span class="m">1</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="c">// Set up for the next loop</span>
<span class="c"></span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrent</span> <span class="o">=</span> <span class="nx">i</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">iterations</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">ceil</span><span class="o">(</span><span class="nx">nTotal</span><span class="o">/</span><span class="nx">loopN</span><span class="o">)</span> <span class="o">:</span> <span class="m">1</span><span class="o">,</span>
<span class="nx">argument</span><span class="o">:</span> <span class="o">{</span>
<span class="nx">nCurrent</span><span class="o">:</span> <span class="nx">nTotal</span><span class="o">,</span>
<span class="nx">nLoopLength</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="nx">loopN</span> <span class="o">:</span> <span class="nx">nTotal</span>
<span class="o">},</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="m">0</span> <span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Disables DataTable UI.</span>
<span class="c"> *</span>
<span class="c"> * @method disable</span>
<span class="c"> */</span>
<span class="nx">disable</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTable</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTable</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elMask</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elMask</span><span class="o">;</span>
<span class="nx">elMask</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">width</span> <span class="o">=</span> <span class="nx">elTable</span><span class="o">.</span><span class="nx">offsetWidth</span> <span class="o">+</span> <span class="s2">&quot;px&quot;</span><span class="o">;</span>
<span class="nx">elMask</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">height</span> <span class="o">=</span> <span class="nx">elTable</span><span class="o">.</span><span class="nx">offsetHeight</span> <span class="o">+</span> <span class="s2">&quot;px&quot;</span><span class="o">;</span>
<span class="nx">elMask</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;disableEvent&quot;</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Undisables DataTable UI.</span>
<span class="c"> *</span>
<span class="c"> * @method undisable</span>
<span class="c"> */</span>
<span class="nx">undisable</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elMask</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;undisableEvent&quot;</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Nulls out the entire DataTable instance and related objects, removes attached</span>
<span class="c"> * event listeners, and clears out DOM elements inside the container. After</span>
<span class="c"> * calling this method, the instance reference should be expliclitly nulled by</span>
<span class="c"> * implementer, as in myDataTable = null. Use with caution!</span>
<span class="c"> *</span>
<span class="c"> * @method destroy</span>
<span class="c"> */</span>
<span class="nx">destroy</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">// Store for later</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">instanceName</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">stop</span><span class="o">();</span>
<span class="c">// Destroy static resizer proxy and column proxy</span>
<span class="c"></span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_destroyColumnDragTargetEl</span><span class="o">();</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">_destroyColumnResizerProxyEl</span><span class="o">();</span>
<span class="c">// Destroy ColumnDD and ColumnResizers</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_destroyColumnHelpers</span><span class="o">();</span>
<span class="c">// Destroy all CellEditors</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oCellEditor</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">flat</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">oCellEditor</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">flat</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">editor</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oCellEditor</span> <span class="o">&amp;&amp;</span> <span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">destroy</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">destroy</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">flat</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">editor</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unhook custom events</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">unsubscribeAll</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unsubscribeAll</span><span class="o">();</span>
<span class="c">// Unhook DOM events</span>
<span class="c"></span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">removeListener</span><span class="o">(</span><span class="nb">document</span><span class="o">,</span> <span class="s2">&quot;click&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onDocumentClick</span><span class="o">);</span>
<span class="c">// Clear out the container</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_destroyContainerEl</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">);</span>
<span class="c">// Null out objects</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">param</span> <span class="k">in</span> <span class="k">this</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">hasOwnProperty</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="nx">param</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">[</span><span class="nx">param</span><span class="o">]</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Clean up static values</span>
<span class="c"></span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_nCurrentCount</span><span class="o">--;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">DT</span><span class="o">.</span><span class="nx">_nCurrentCount</span> <span class="o">&lt;</span> <span class="m">1</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">DT</span><span class="o">.</span><span class="nx">_elDynStyleNode</span><span class="o">)</span> <span class="o">{</span>
<span class="nb">document</span><span class="o">.</span><span class="nx">getElementsByTagName</span><span class="o">(</span><span class="s1">&#39;head&#39;</span><span class="o">)[</span><span class="m">0</span><span class="o">].</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">DT</span><span class="o">.</span><span class="nx">_elDynStyleNode</span><span class="o">);</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">_elDynStyleNode</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;DataTable instance destroyed: &quot;</span> <span class="o">+</span> <span class="nx">instanceName</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Displays message within secondary TBODY.</span>
<span class="c"> *</span>
<span class="c"> * @method showTableMessage</span>
<span class="c"> * @param sHTML {String} (optional) Value for innerHTMlang.</span>
<span class="c"> * @param sClassName {String} (optional) Classname.</span>
<span class="c"> */</span>
<span class="nx">showTableMessage</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">sHTML</span><span class="o">,</span> <span class="nx">sClassName</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elMsgTd</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">sHTML</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">elCell</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">sHTML</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">sClassName</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">elCell</span><span class="o">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nx">sClassName</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elMsgTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableMsgShowEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">html</span><span class="o">:</span><span class="nx">sHTML</span><span class="o">,</span> <span class="nx">className</span><span class="o">:</span><span class="nx">sClassName</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;DataTable showing message: &quot;</span> <span class="o">+</span> <span class="nx">sHTML</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Hides secondary TBODY.</span>
<span class="c"> *</span>
<span class="c"> * @method hideTableMessage</span>
<span class="c"> */</span>
<span class="nx">hideTableMessage</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elMsgTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">!=</span> <span class="s2">&quot;none&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elMsgTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elMsgTbody</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">width</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;tableMsgHideEvent&quot;</span><span class="o">);</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;DataTable message hidden&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Brings focus to the TBODY element. Alias to focusTbodyEl.</span>
<span class="c"> *</span>
<span class="c"> * @method focus</span>
<span class="c"> */</span>
<span class="nx">focus</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">focusTbodyEl</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Brings focus to the THEAD element.</span>
<span class="c"> *</span>
<span class="c"> * @method focusTheadEl</span>
<span class="c"> */</span>
<span class="nx">focusTheadEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_focusEl</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Brings focus to the TBODY element.</span>
<span class="c"> *</span>
<span class="c"> * @method focusTbodyEl</span>
<span class="c"> */</span>
<span class="nx">focusTbodyEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_focusEl</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Setting display:none on DataTable or any parent may impact width validations.</span>
<span class="c"> * After setting display back to &quot;&quot;, implementers should call this method to </span>
<span class="c"> * manually perform those validations.</span>
<span class="c"> *</span>
<span class="c"> * @method onShow</span>
<span class="c"> */</span>
<span class="nx">onShow</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">validateColumnWidths</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">// RECORDSET FUNCTIONS</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Returns Record index for given TR element or page row index.</span>
<span class="c"> *</span>
<span class="c"> * @method getRecordIndex</span>
<span class="c"> * @param row {YAHOO.widget.Record | HTMLElement | Number} Record instance, TR</span>
<span class="c"> * element reference or page row index.</span>
<span class="c"> * @return {Number} Record&#39;s RecordSet index, or null.</span>
<span class="c"> */</span>
<span class="nx">getRecordIndex</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nTrIndex</span><span class="o">;</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">row</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// By Record</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">row</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Record</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// By element reference</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Find the TR element</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">el</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">el</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">nTrIndex</span> <span class="o">=</span> <span class="nx">el</span><span class="o">.</span><span class="nx">sectionRowIndex</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// By page row index</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">nTrIndex</span> <span class="o">=</span> <span class="nx">row</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">nTrIndex</span><span class="o">))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oPaginator</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;paginator&quot;</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oPaginator</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">oPaginator</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;recordOffset&#39;</span><span class="o">)</span> <span class="o">+</span> <span class="nx">nTrIndex</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">nTrIndex</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not get Record index for row &quot;</span> <span class="o">+</span> <span class="nx">row</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * For the given identifier, returns the associated Record instance.</span>
<span class="c"> *</span>
<span class="c"> * @method getRecord</span>
<span class="c"> * @param row {HTMLElement | Number | String} DOM reference to a TR element (or</span>
<span class="c"> * child of a TR element), RecordSet position index, or Record ID.</span>
<span class="c"> * @return {YAHOO.widget.Record} Record instance.</span>
<span class="c"> */</span>
<span class="nx">getRecord</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Validate TR element</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elRow</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">elRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span><span class="o">));</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oRecord</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Record</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not get Record for row at &quot;</span> <span class="o">+</span> <span class="nx">row</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">// COLUMN FUNCTIONS</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * For the given identifier, returns the associated Column instance. Note: For</span>
<span class="c"> * getting Columns by Column ID string, please use the method getColumnById().</span>
<span class="c"> *</span>
<span class="c"> * @method getColumn</span>
<span class="c"> * @param column {HTMLElement | String | Number} TH/TD element (or child of a</span>
<span class="c"> * TH/TD element), a Column key, or a ColumnSet key index.</span>
<span class="c"> * @return {YAHOO.widget.Column} Column instance.</span>
<span class="c"> */</span>
<span class="nx">getColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">column</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">column</span><span class="o">);</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Validate TD element</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">column</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elCell</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Validate TH element</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">(</span><span class="nx">column</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elCell</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Find by TH el ID</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allColumns</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">flat</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="nx">allColumns</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">allColumns</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">getThEl</span><span class="o">().</span><span class="nx">id</span> <span class="o">===</span> <span class="nx">elCell</span><span class="o">.</span><span class="nx">id</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="nx">allColumns</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not get Column for column at &quot;</span> <span class="o">+</span> <span class="nx">column</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">oColumn</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * For the given Column ID, returns the associated Column instance. Note: For</span>
<span class="c"> * getting Columns by key, please use the method getColumn().</span>
<span class="c"> *</span>
<span class="c"> * @method getColumnById</span>
<span class="c"> * @param column {String} Column ID string.</span>
<span class="c"> * @return {YAHOO.widget.Column} Column instance.</span>
<span class="c"> */</span>
<span class="nx">getColumnById</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">column</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">getColumnById</span><span class="o">(</span><span class="nx">column</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * For the given Column instance, returns next direction to sort.</span>
<span class="c"> *</span>
<span class="c"> * @method getColumnSortDir</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param oSortedBy {Object} (optional) Specify the state, or use current state. </span>
<span class="c"> * @return {String} YAHOO.widget.DataTable.CLASS_ASC or YAHOO.widget.DataTableCLASS_DESC.</span>
<span class="c"> */</span>
<span class="nx">getColumnSortDir</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oSortedBy</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span> <span class="o">&amp;&amp;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span><span class="o">.</span><span class="nx">defaultOrder</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span><span class="o">.</span><span class="nx">defaultOrder</span> <span class="o">==</span> <span class="s2">&quot;asc&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span><span class="o">.</span><span class="nx">defaultDir</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ASC</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span><span class="o">.</span><span class="nx">defaultOrder</span> <span class="o">==</span> <span class="s2">&quot;desc&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span><span class="o">.</span><span class="nx">defaultDir</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DESC</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// What is the Column&#39;s default sort direction?</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">sortDir</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span> <span class="o">&amp;&amp;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span><span class="o">.</span><span class="nx">defaultDir</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span><span class="o">.</span><span class="nx">defaultDir</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ASC</span><span class="o">;</span>
<span class="c">// Is the Column currently sorted?</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">bSorted</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="nx">oSortedBy</span> <span class="o">=</span> <span class="nx">oSortedBy</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;sortedBy&quot;</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oSortedBy</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oSortedBy</span><span class="o">.</span><span class="nx">key</span> <span class="o">===</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">bSorted</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oSortedBy</span><span class="o">.</span><span class="nx">dir</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">sortDir</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oSortedBy</span><span class="o">.</span><span class="nx">dir</span> <span class="o">===</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ASC</span><span class="o">)</span> <span class="o">?</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DESC</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ASC</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">sortDir</span> <span class="o">=</span> <span class="o">(</span><span class="nx">sortDir</span> <span class="o">===</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ASC</span><span class="o">)</span> <span class="o">?</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DESC</span> <span class="o">:</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ASC</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">sortDir</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable method gives implementers a hook to show loading message before</span>
<span class="c"> * sorting Column.</span>
<span class="c"> *</span>
<span class="c"> * @method doBeforeSortColumn</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param sSortDir {String} YAHOO.widget.DataTable.CLASS_ASC or</span>
<span class="c"> * YAHOO.widget.DataTable.CLASS_DESC.</span>
<span class="c"> * @return {Boolean} Return true to continue sorting Column.</span>
<span class="c"> */</span>
<span class="nx">doBeforeSortColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">sSortDir</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">showTableMessage</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;MSG_LOADING&quot;</span><span class="o">),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LOADING</span><span class="o">);</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Sorts given Column. If &quot;dynamicData&quot; is true, current selections are purged before</span>
<span class="c"> * a request is sent to the DataSource for data for the new state (using the</span>
<span class="c"> * request returned by &quot;generateRequest()&quot;).</span>
<span class="c"> *</span>
<span class="c"> * @method sortColumn</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param sDir {String} (Optional) YAHOO.widget.DataTable.CLASS_ASC or</span>
<span class="c"> * YAHOO.widget.DataTable.CLASS_DESC</span>
<span class="c"> */</span>
<span class="nx">sortColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">sDir</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oColumn</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Column</span><span class="o">))</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortable</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SORTABLE</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Validate given direction</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">sDir</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">sDir</span> <span class="o">!==</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ASC</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">sDir</span> <span class="o">!==</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DESC</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">sDir</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Get the sort dir</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">sSortDir</span> <span class="o">=</span> <span class="nx">sDir</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumnSortDir</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="c">// Is the Column currently sorted?</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oSortedBy</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;sortedBy&quot;</span><span class="o">)</span> <span class="o">||</span> <span class="o">{};</span>
<span class="k">var</span> <span class="nx">bSorted</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oSortedBy</span><span class="o">.</span><span class="nx">key</span> <span class="o">===</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span><span class="o">)</span> <span class="o">?</span> <span class="kc">true</span> <span class="o">:</span> <span class="kc">false</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">ok</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeSortColumn</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">sSortDir</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">ok</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Server-side sort</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;dynamicData&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Get current state</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oState</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getState</span><span class="o">();</span>
<span class="c">// Reset record offset, if paginated</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oState</span><span class="o">.</span><span class="nx">pagination</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oState</span><span class="o">.</span><span class="nx">pagination</span><span class="o">.</span><span class="nx">recordOffset</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Update sortedBy to new values</span>
<span class="c"></span> <span class="nx">oState</span><span class="o">.</span><span class="nx">sortedBy</span> <span class="o">=</span> <span class="o">{</span>
<span class="nx">key</span><span class="o">:</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span><span class="o">,</span>
<span class="nx">dir</span><span class="o">:</span> <span class="nx">sSortDir</span>
<span class="o">};</span>
<span class="c">// Get the request for the new state</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">request</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;generateRequest&quot;</span><span class="o">)(</span><span class="nx">oState</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="c">// Purge selections</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">unselectAllRows</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectAllCells</span><span class="o">();</span>
<span class="c">// Send request for new data</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">callback</span> <span class="o">=</span> <span class="o">{</span>
<span class="nx">success</span> <span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">onDataReturnSetRows</span><span class="o">,</span>
<span class="nx">failure</span> <span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">onDataReturnSetRows</span><span class="o">,</span>
<span class="nx">argument</span> <span class="o">:</span> <span class="nx">oState</span><span class="o">,</span> <span class="c">// Pass along the new state to the callback</span>
<span class="c"></span> <span class="nx">scope</span> <span class="o">:</span> <span class="k">this</span>
<span class="o">};</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oDataSource</span><span class="o">.</span><span class="nx">sendRequest</span><span class="o">(</span><span class="nx">request</span><span class="o">,</span> <span class="nx">callback</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Client-side sort</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Sort the Records</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">bSorted</span> <span class="o">||</span> <span class="nx">sDir</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Get the field to sort</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">sField</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span> <span class="o">&amp;&amp;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span><span class="o">.</span><span class="nx">field</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span><span class="o">.</span><span class="nx">field</span> <span class="o">:</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">field</span><span class="o">;</span>
<span class="c">// Is there a custom sort handler function defined?</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">sortFnc</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span> <span class="o">&amp;&amp;</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isFunction</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span><span class="o">.</span><span class="nx">sortFunction</span><span class="o">))</span> <span class="o">?</span>
<span class="c">// Custom sort function</span>
<span class="c"></span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortOptions</span><span class="o">.</span><span class="nx">sortFunction</span> <span class="o">:</span>
<span class="c">// Default sort function</span>
<span class="c"></span> <span class="k">function</span><span class="o">(</span><span class="nx">a</span><span class="o">,</span> <span class="nx">b</span><span class="o">,</span> <span class="nx">desc</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">Sort</span><span class="o">.</span><span class="nx">compare</span><span class="o">(</span><span class="nx">a</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="nx">sField</span><span class="o">),</span><span class="nx">b</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="nx">sField</span><span class="o">),</span> <span class="nx">desc</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">sorted</span> <span class="o">=</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">Sort</span><span class="o">.</span><span class="nx">compare</span><span class="o">(</span><span class="nx">a</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="nx">sField</span><span class="o">),</span><span class="nx">b</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="nx">sField</span><span class="o">),</span> <span class="nx">desc</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">sorted</span> <span class="o">===</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">Sort</span><span class="o">.</span><span class="nx">compare</span><span class="o">(</span><span class="nx">a</span><span class="o">.</span><span class="nx">getCount</span><span class="o">(),</span><span class="nx">b</span><span class="o">.</span><span class="nx">getCount</span><span class="o">(),</span> <span class="nx">desc</span><span class="o">);</span> <span class="c">// Bug 1932978</span>
<span class="c"></span> <span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">sorted</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">};</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">sortRecords</span><span class="o">(</span><span class="nx">sortFnc</span><span class="o">,</span> <span class="o">((</span><span class="nx">sSortDir</span> <span class="o">==</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DESC</span><span class="o">)</span> <span class="o">?</span> <span class="kc">true</span> <span class="o">:</span> <span class="kc">false</span><span class="o">));</span>
<span class="o">}</span>
<span class="c">// Just reverse the Records</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">reverseRecords</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">// Reset to first page if paginated</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oPaginator</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oPaginator</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Set page silently, so as not to fire change event.</span>
<span class="c"></span> <span class="nx">oPaginator</span><span class="o">.</span><span class="nx">setPage</span><span class="o">(</span><span class="m">1</span><span class="o">,</span><span class="kc">true</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Update UI via sortedBy</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">render</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s2">&quot;sortedBy&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">key</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span><span class="o">,</span> <span class="nx">dir</span><span class="o">:</span><span class="nx">sSortDir</span><span class="o">,</span> <span class="nx">column</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;columnSortEvent&quot;</span><span class="o">,{</span><span class="nx">column</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">,</span><span class="nx">dir</span><span class="o">:</span><span class="nx">sSortDir</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot; sorted \&quot;&quot;</span> <span class="o">+</span> <span class="nx">sSortDir</span> <span class="o">+</span> <span class="s2">&quot;\&quot;&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not sort Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot;&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Sets given Column to given pixel width. If new width is less than minimum</span>
<span class="c"> * width, sets to minimum width. Updates oColumn.width value.</span>
<span class="c"> *</span>
<span class="c"> * @method setColumnWidth</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param nWidth {Number} New width in pixels. A null value auto-sizes Column,</span>
<span class="c"> * subject to minWidth and maxAutoWidth validations. </span>
<span class="c"> */</span>
<span class="nx">setColumnWidth</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">nWidth</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(!(</span><span class="nx">oColumn</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Column</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Validate new width against minimum width</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">nWidth</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// This is why we must require a Number... :-|</span>
<span class="c"></span> <span class="nx">nWidth</span> <span class="o">=</span> <span class="o">(</span><span class="nx">nWidth</span> <span class="o">&gt;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span><span class="o">)</span> <span class="o">?</span> <span class="nx">nWidth</span> <span class="o">:</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span><span class="o">;</span>
<span class="c">// Save state</span>
<span class="c"></span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">width</span> <span class="o">=</span> <span class="nx">nWidth</span><span class="o">;</span>
<span class="c">// Resize the DOM elements</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_setColumnWidth</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">nWidth</span><span class="o">+</span><span class="s2">&quot;px&quot;</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;columnSetWidthEvent&quot;</span><span class="o">,{</span><span class="nx">column</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">,</span><span class="nx">width</span><span class="o">:</span><span class="nx">nWidth</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Set width of Column &quot;</span> <span class="o">+</span> <span class="nx">oColumn</span> <span class="o">+</span> <span class="s2">&quot; to &quot;</span> <span class="o">+</span> <span class="nx">nWidth</span> <span class="o">+</span> <span class="s2">&quot;px&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Unsets a width to auto-size</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nWidth</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Save state</span>
<span class="c"></span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">width</span> <span class="o">=</span> <span class="nx">nWidth</span><span class="o">;</span>
<span class="c">// Resize the DOM elements</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_setColumnWidth</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="s2">&quot;auto&quot;</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">validateColumnWidths</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;columnUnsetWidthEvent&quot;</span><span class="o">,{</span><span class="nx">column</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Column &quot;</span> <span class="o">+</span> <span class="nx">oColumn</span> <span class="o">+</span> <span class="s2">&quot; width unset&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not set width of Column &quot;</span> <span class="o">+</span> <span class="nx">oColumn</span> <span class="o">+</span> <span class="s2">&quot; to &quot;</span> <span class="o">+</span> <span class="nx">nWidth</span> <span class="o">+</span> <span class="s2">&quot;px&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Sets liner DIV elements of given Column to given width. When value should be</span>
<span class="c"> * auto-calculated to fit content overflow is set to visible, otherwise overflow</span>
<span class="c"> * is set to hidden. No validations against minimum width and no updating</span>
<span class="c"> * Column.width value.</span>
<span class="c"> *</span>
<span class="c"> * @method _setColumnWidth</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param sWidth {String} New width value.</span>
<span class="c"> * @param sOverflow {String} Should be &quot;hidden&quot; when Column width is explicitly</span>
<span class="c"> * being set to a value, but should be &quot;visible&quot; when Column is meant to auto-fit content. </span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_setColumnWidth</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">sWidth</span><span class="o">,</span> <span class="nx">sOverflow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">sOverflow</span> <span class="o">=</span> <span class="nx">sOverflow</span> <span class="o">||</span> <span class="o">(((</span><span class="nx">sWidth</span> <span class="o">===</span> <span class="s1">&#39;&#39;</span><span class="o">)</span> <span class="o">||</span> <span class="o">(</span><span class="nx">sWidth</span> <span class="o">===</span> <span class="s1">&#39;auto&#39;</span><span class="o">))</span> <span class="o">?</span> <span class="s1">&#39;visible&#39;</span> <span class="o">:</span> <span class="s1">&#39;hidden&#39;</span><span class="o">);</span>
<span class="c">// Dynamic style algorithm</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">DT</span><span class="o">.</span><span class="nx">_bDynStylesFallback</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setColumnWidthDynStyles</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">sWidth</span><span class="o">,</span> <span class="nx">sOverflow</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Dynamic function algorithm</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setColumnWidthDynFunction</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">sWidth</span><span class="o">,</span> <span class="nx">sOverflow</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not set width of unknown Column &quot;</span> <span class="o">+</span> <span class="nx">oColumn</span> <span class="o">+</span> <span class="s2">&quot; to &quot;</span> <span class="o">+</span> <span class="nx">sWidth</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Updates width of a Column&#39;s liner DIV elements by dynamically creating a</span>
<span class="c"> * STYLE node and writing and updating CSS style rules to it. If this fails during</span>
<span class="c"> * runtime, the fallback method _setColumnWidthDynFunction() will be called.</span>
<span class="c"> * Notes: This technique is not performant in IE6. IE7 crashes if DataTable is</span>
<span class="c"> * nested within another TABLE element. For these cases, it is recommended to</span>
<span class="c"> * use the method _setColumnWidthDynFunction by setting _bDynStylesFallback to TRUE.</span>
<span class="c"> *</span>
<span class="c"> * @method _setColumnWidthDynStyles</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param sWidth {String} New width value.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_setColumnWidthDynStyles</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">sWidth</span><span class="o">,</span> <span class="nx">sOverflow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">s</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_elDynStyleNode</span><span class="o">,</span>
<span class="nx">rule</span><span class="o">;</span>
<span class="c">// Create a new STYLE node</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">s</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">s</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s1">&#39;style&#39;</span><span class="o">);</span>
<span class="nx">s</span><span class="o">.</span><span class="nx">type</span> <span class="o">=</span> <span class="s1">&#39;text/css&#39;</span><span class="o">;</span>
<span class="nx">s</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">getElementsByTagName</span><span class="o">(</span><span class="s1">&#39;head&#39;</span><span class="o">).</span><span class="nx">item</span><span class="o">(</span><span class="m">0</span><span class="o">).</span><span class="nx">appendChild</span><span class="o">(</span><span class="nx">s</span><span class="o">);</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">_elDynStyleNode</span> <span class="o">=</span> <span class="nx">s</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// We have a STYLE node to update</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">s</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Use unique classname for this Column instance as a hook for resizing</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">sClassname</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="k">this</span><span class="o">.</span><span class="nx">getId</span><span class="o">()</span> <span class="o">+</span> <span class="s2">&quot;-col-&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getSanitizedKey</span><span class="o">()</span> <span class="o">+</span> <span class="s2">&quot; .&quot;</span> <span class="o">+</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LINER</span><span class="o">;</span>
<span class="c">// Hide for performance</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s1">&#39;none&#39;</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">rule</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">_oDynStyles</span><span class="o">[</span><span class="nx">sClassname</span><span class="o">];</span>
<span class="c">// The Column does not yet have a rule</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">rule</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">s</span><span class="o">.</span><span class="nx">styleSheet</span> <span class="o">&amp;&amp;</span> <span class="nx">s</span><span class="o">.</span><span class="nx">styleSheet</span><span class="o">.</span><span class="nx">addRule</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">s</span><span class="o">.</span><span class="nx">styleSheet</span><span class="o">.</span><span class="nx">addRule</span><span class="o">(</span><span class="nx">sClassname</span><span class="o">,</span><span class="s2">&quot;overflow:&quot;</span><span class="o">+</span><span class="nx">sOverflow</span><span class="o">);</span>
<span class="nx">s</span><span class="o">.</span><span class="nx">styleSheet</span><span class="o">.</span><span class="nx">addRule</span><span class="o">(</span><span class="nx">sClassname</span><span class="o">,</span><span class="s1">&#39;width:&#39;</span><span class="o">+</span><span class="nx">sWidth</span><span class="o">);</span>
<span class="nx">rule</span> <span class="o">=</span> <span class="nx">s</span><span class="o">.</span><span class="nx">styleSheet</span><span class="o">.</span><span class="nx">rules</span><span class="o">[</span><span class="nx">s</span><span class="o">.</span><span class="nx">styleSheet</span><span class="o">.</span><span class="nx">rules</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">];</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">_oDynStyles</span><span class="o">[</span><span class="nx">sClassname</span><span class="o">]</span> <span class="o">=</span> <span class="nx">rule</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">s</span><span class="o">.</span><span class="nx">sheet</span> <span class="o">&amp;&amp;</span> <span class="nx">s</span><span class="o">.</span><span class="nx">sheet</span><span class="o">.</span><span class="nx">insertRule</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">s</span><span class="o">.</span><span class="nx">sheet</span><span class="o">.</span><span class="nx">insertRule</span><span class="o">(</span><span class="nx">sClassname</span><span class="o">+</span><span class="s2">&quot; {overflow:&quot;</span><span class="o">+</span><span class="nx">sOverflow</span><span class="o">+</span><span class="s2">&quot;;width:&quot;</span><span class="o">+</span><span class="nx">sWidth</span><span class="o">+</span><span class="s2">&quot;;}&quot;</span><span class="o">,</span><span class="nx">s</span><span class="o">.</span><span class="nx">sheet</span><span class="o">.</span><span class="nx">cssRules</span><span class="o">.</span><span class="nx">length</span><span class="o">);</span>
<span class="nx">rule</span> <span class="o">=</span> <span class="nx">s</span><span class="o">.</span><span class="nx">sheet</span><span class="o">.</span><span class="nx">cssRules</span><span class="o">[</span><span class="nx">s</span><span class="o">.</span><span class="nx">sheet</span><span class="o">.</span><span class="nx">cssRules</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">];</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">_oDynStyles</span><span class="o">[</span><span class="nx">sClassname</span><span class="o">]</span> <span class="o">=</span> <span class="nx">rule</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// We have a rule to update</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">rule</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">overflow</span> <span class="o">=</span> <span class="nx">sOverflow</span><span class="o">;</span>
<span class="nx">rule</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">width</span> <span class="o">=</span> <span class="nx">sWidth</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Unhide</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// That was not a success, we must call the fallback routine</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">rule</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">_bDynStylesFallback</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setColumnWidthDynFunction</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">sWidth</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Updates width of a Column&#39;s liner DIV elements by dynamically creating a</span>
<span class="c"> * function to update all element style properties in one pass. Note: This</span>
<span class="c"> * technique is not supported in sandboxed environments that prohibit EVALs. </span>
<span class="c"> *</span>
<span class="c"> * @method _setColumnWidthDynFunction</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param sWidth {String} New width value.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_setColumnWidthDynFunction</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">sWidth</span><span class="o">,</span> <span class="nx">sOverflow</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// TODO: why is this here?</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">sWidth</span> <span class="o">==</span> <span class="s1">&#39;auto&#39;</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">sWidth</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Create one function for each value of rows.length</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">rowslen</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span> <span class="o">?</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">.</span><span class="nx">length</span> <span class="o">:</span> <span class="m">0</span><span class="o">;</span>
<span class="c">// Dynamically create the function</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(!</span><span class="k">this</span><span class="o">.</span><span class="nx">_aDynFunctions</span><span class="o">[</span><span class="nx">rowslen</span><span class="o">])</span> <span class="o">{</span>
<span class="c">//Compile a custom function to do all the liner div width</span>
<span class="c"></span> <span class="c">//assignments at the same time. A unique function is required</span>
<span class="c"></span> <span class="c">//for each unique number of rows in _elTbody. This will</span>
<span class="c"></span> <span class="c">//result in a function declaration like:</span>
<span class="c"></span> <span class="c">//function (oColumn,sWidth,sOverflow) {</span>
<span class="c"></span> <span class="c">// var colIdx = oColumn.getKeyIndex();</span>
<span class="c"></span> <span class="c">// oColumn.getThLinerEl().style.overflow =</span>
<span class="c"></span> <span class="c">// this._elTbody.rows[0].cells[colIdx].firstChild.style.overflow =</span>
<span class="c"></span> <span class="c">// this._elTbody.rows[1].cells[colIdx].firstChild.style.overflow =</span>
<span class="c"></span> <span class="c">// ... (for all row indices in this._elTbody.rows.length - 1)</span>
<span class="c"></span> <span class="c">// this._elTbody.rows[99].cells[colIdx].firstChild.style.overflow =</span>
<span class="c"></span> <span class="c">// sOverflow;</span>
<span class="c"></span> <span class="c">// oColumn.getThLinerEl().style.width =</span>
<span class="c"></span> <span class="c">// this._elTbody.rows[0].cells[colIdx].firstChild.style.width =</span>
<span class="c"></span> <span class="c">// this._elTbody.rows[1].cells[colIdx].firstChild.style.width =</span>
<span class="c"></span> <span class="c">// ... (for all row indices in this._elTbody.rows.length - 1)</span>
<span class="c"></span> <span class="c">// this._elTbody.rows[99].cells[colIdx].firstChild.style.width =</span>
<span class="c"></span> <span class="c">// sWidth;</span>
<span class="c"></span> <span class="c">//}</span>
<span class="c"></span>
<span class="k">var</span> <span class="nx">i</span><span class="o">,</span><span class="nx">j</span><span class="o">,</span><span class="nx">k</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">resizerDef</span> <span class="o">=</span> <span class="o">[</span>
<span class="s1">&#39;var colIdx=oColumn.getKeyIndex();&#39;</span><span class="o">,</span>
<span class="s1">&#39;oColumn.getThLinerEl().style.overflow=&#39;</span>
<span class="o">];</span>
<span class="k">for</span> <span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">rowslen</span><span class="o">-</span><span class="m">1</span><span class="o">,</span> <span class="nx">j</span><span class="o">=</span><span class="m">2</span><span class="o">;</span> <span class="nx">i</span> <span class="o">&gt;=</span> <span class="m">0</span><span class="o">;</span> <span class="o">--</span><span class="nx">i</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">resizerDef</span><span class="o">[</span><span class="nx">j</span><span class="o">++]</span> <span class="o">=</span> <span class="s1">&#39;this._elTbody.rows[&#39;</span><span class="o">;</span>
<span class="nx">resizerDef</span><span class="o">[</span><span class="nx">j</span><span class="o">++]</span> <span class="o">=</span> <span class="nx">i</span><span class="o">;</span>
<span class="nx">resizerDef</span><span class="o">[</span><span class="nx">j</span><span class="o">++]</span> <span class="o">=</span> <span class="s1">&#39;].cells[colIdx].firstChild.style.overflow=&#39;</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">resizerDef</span><span class="o">[</span><span class="nx">j</span><span class="o">]</span> <span class="o">=</span> <span class="s1">&#39;sOverflow;&#39;</span><span class="o">;</span>
<span class="nx">resizerDef</span><span class="o">[</span><span class="nx">j</span><span class="o">+</span><span class="m">1</span><span class="o">]</span> <span class="o">=</span> <span class="s1">&#39;oColumn.getThLinerEl().style.width=&#39;</span><span class="o">;</span>
<span class="k">for</span> <span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">rowslen</span><span class="o">-</span><span class="m">1</span><span class="o">,</span> <span class="nx">k</span><span class="o">=</span><span class="nx">j</span><span class="o">+</span><span class="m">2</span><span class="o">;</span> <span class="nx">i</span> <span class="o">&gt;=</span> <span class="m">0</span><span class="o">;</span> <span class="o">--</span><span class="nx">i</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">resizerDef</span><span class="o">[</span><span class="nx">k</span><span class="o">++]</span> <span class="o">=</span> <span class="s1">&#39;this._elTbody.rows[&#39;</span><span class="o">;</span>
<span class="nx">resizerDef</span><span class="o">[</span><span class="nx">k</span><span class="o">++]</span> <span class="o">=</span> <span class="nx">i</span><span class="o">;</span>
<span class="nx">resizerDef</span><span class="o">[</span><span class="nx">k</span><span class="o">++]</span> <span class="o">=</span> <span class="s1">&#39;].cells[colIdx].firstChild.style.width=&#39;</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">resizerDef</span><span class="o">[</span><span class="nx">k</span><span class="o">]</span> <span class="o">=</span> <span class="s1">&#39;sWidth;&#39;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_aDynFunctions</span><span class="o">[</span><span class="nx">rowslen</span><span class="o">]</span> <span class="o">=</span>
<span class="k">new</span> <span class="nb">Function</span><span class="o">(</span><span class="s1">&#39;oColumn&#39;</span><span class="o">,</span><span class="s1">&#39;sWidth&#39;</span><span class="o">,</span><span class="s1">&#39;sOverflow&#39;</span><span class="o">,</span><span class="nx">resizerDef</span><span class="o">.</span><span class="nx">join</span><span class="o">(</span><span class="s1">&#39;&#39;</span><span class="o">));</span>
<span class="o">}</span>
<span class="c">// Get the function to execute</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">resizerFn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aDynFunctions</span><span class="o">[</span><span class="nx">rowslen</span><span class="o">];</span>
<span class="c">// TODO: Hide TBODY for performance in _setColumnWidthDynFunction?</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(</span><span class="nx">resizerFn</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">resizerFn</span><span class="o">.</span><span class="nx">call</span><span class="o">(</span><span class="k">this</span><span class="o">,</span><span class="nx">oColumn</span><span class="o">,</span><span class="nx">sWidth</span><span class="o">,</span><span class="nx">sOverflow</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * For one or all Columns, when Column is not hidden, width is not set, and minWidth</span>
<span class="c"> * and/or maxAutoWidth is set, validates auto-width against minWidth and maxAutoWidth.</span>
<span class="c"> *</span>
<span class="c"> * @method validateColumnWidths</span>
<span class="c"> * @param oArg.column {YAHOO.widget.Column} (optional) One Column to validate. If null, all Columns&#39; widths are validated.</span>
<span class="c"> */</span>
<span class="nx">validateColumnWidths</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elColgroup</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elColgroupClone</span> <span class="o">=</span> <span class="nx">elColgroup</span><span class="o">.</span><span class="nx">cloneNode</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">bNeedsValidation</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">allKeys</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elThLiner</span><span class="o">;</span>
<span class="c">// Validate just one Column&#39;s minWidth and/or maxAutoWidth</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">hidden</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">width</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">elThLiner</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getThLinerEl</span><span class="o">();</span>
<span class="k">if</span><span class="o">((</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elThLiner</span><span class="o">.</span><span class="nx">offsetWidth</span> <span class="o">&lt;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">elColgroupClone</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()].</span><span class="nx">style</span><span class="o">.</span><span class="nx">width</span> <span class="o">=</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span> <span class="o">+</span>
<span class="o">(</span><span class="nb">parseInt</span><span class="o">(</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">getStyle</span><span class="o">(</span><span class="nx">elThLiner</span><span class="o">,</span><span class="s2">&quot;paddingLeft&quot;</span><span class="o">),</span><span class="m">10</span><span class="o">)|</span><span class="m">0</span><span class="o">)</span> <span class="o">+</span>
<span class="o">(</span><span class="nb">parseInt</span><span class="o">(</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">getStyle</span><span class="o">(</span><span class="nx">elThLiner</span><span class="o">,</span><span class="s2">&quot;paddingRight&quot;</span><span class="o">),</span><span class="m">10</span><span class="o">)|</span><span class="m">0</span><span class="o">)</span> <span class="o">+</span> <span class="s2">&quot;px&quot;</span><span class="o">;</span>
<span class="nx">bNeedsValidation</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">((</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">maxAutoWidth</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elThLiner</span><span class="o">.</span><span class="nx">offsetWidth</span> <span class="o">&gt;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">maxAutoWidth</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setColumnWidth</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">maxAutoWidth</span><span class="o">+</span><span class="s2">&quot;px&quot;</span><span class="o">,</span> <span class="s2">&quot;hidden&quot;</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Validate all Columns</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="nx">allKeys</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="nx">allKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">hidden</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">width</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elThLiner</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getThLinerEl</span><span class="o">();</span>
<span class="k">if</span><span class="o">((</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elThLiner</span><span class="o">.</span><span class="nx">offsetWidth</span> <span class="o">&lt;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">elColgroupClone</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">style</span><span class="o">.</span><span class="nx">width</span> <span class="o">=</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span> <span class="o">+</span>
<span class="o">(</span><span class="nb">parseInt</span><span class="o">(</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">getStyle</span><span class="o">(</span><span class="nx">elThLiner</span><span class="o">,</span><span class="s2">&quot;paddingLeft&quot;</span><span class="o">),</span><span class="m">10</span><span class="o">)|</span><span class="m">0</span><span class="o">)</span> <span class="o">+</span>
<span class="o">(</span><span class="nb">parseInt</span><span class="o">(</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">getStyle</span><span class="o">(</span><span class="nx">elThLiner</span><span class="o">,</span><span class="s2">&quot;paddingRight&quot;</span><span class="o">),</span><span class="m">10</span><span class="o">)|</span><span class="m">0</span><span class="o">)</span> <span class="o">+</span> <span class="s2">&quot;px&quot;</span><span class="o">;</span>
<span class="nx">bNeedsValidation</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">((</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">maxAutoWidth</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">elThLiner</span><span class="o">.</span><span class="nx">offsetWidth</span> <span class="o">&gt;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">maxAutoWidth</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setColumnWidth</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">maxAutoWidth</span><span class="o">+</span><span class="s2">&quot;px&quot;</span><span class="o">,</span> <span class="s2">&quot;hidden&quot;</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">bNeedsValidation</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elColgroup</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">replaceChild</span><span class="o">(</span><span class="nx">elColgroupClone</span><span class="o">,</span> <span class="nx">elColgroup</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span> <span class="o">=</span> <span class="nx">elColgroupClone</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Clears minWidth.</span>
<span class="c"> *</span>
<span class="c"> * @method _clearMinWidth</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Which Column.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_clearMinWidth</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()].</span><span class="nx">style</span><span class="o">.</span><span class="nx">width</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Restores minWidth.</span>
<span class="c"> *</span>
<span class="c"> * @method _restoreMinWidth</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Which Column.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_restoreMinWidth</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elColgroup</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()].</span><span class="nx">style</span><span class="o">.</span><span class="nx">width</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">minWidth</span> <span class="o">+</span> <span class="s1">&#39;px&#39;</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Hides given Column. NOTE: You cannot hide/show nested Columns. You can only</span>
<span class="c"> * hide/show non-nested Columns, and top-level parent Columns (which will</span>
<span class="c"> * hide/show all children Columns).</span>
<span class="c"> *</span>
<span class="c"> * @method hideColumn</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> */</span>
<span class="nx">hideColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(!(</span><span class="nx">oColumn</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Column</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Only top-level Columns can get hidden due to issues in FF2 and SF3</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">hidden</span> <span class="o">&amp;&amp;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getTreeIndex</span><span class="o">()</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">allrows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTbodyEl</span><span class="o">().</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">l</span> <span class="o">=</span> <span class="nx">allrows</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">allDescendants</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">getDescendants</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="c">// Hide each nested Column</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">allDescendants</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">thisColumn</span> <span class="o">=</span> <span class="nx">allDescendants</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="nx">thisColumn</span><span class="o">.</span><span class="nx">hidden</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="c">// Style the head cell</span>
<span class="c"></span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">thisColumn</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">(),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_HIDDEN</span><span class="o">);</span>
<span class="c">// Does this Column have body cells?</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">thisKeyIndex</span> <span class="o">=</span> <span class="nx">thisColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">thisKeyIndex</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Clear minWidth</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_clearMinWidth</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="c">// Style the body cells</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">;</span><span class="nx">j</span><span class="o">&lt;</span><span class="nx">l</span><span class="o">;</span><span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">allrows</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">thisKeyIndex</span><span class="o">],</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_HIDDEN</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;columnHideEvent&quot;</span><span class="o">,{</span><span class="nx">column</span><span class="o">:</span><span class="nx">thisColumn</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot; hidden&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_repaintOpera</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_clearTrTemplateEl</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not hide Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">dump</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">+</span> <span class="s2">&quot;\&quot;. Only non-nested Columns can be hidden&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Shows given Column. NOTE: You cannot hide/show nested Columns. You can only</span>
<span class="c"> * hide/show non-nested Columns, and top-level parent Columns (which will</span>
<span class="c"> * hide/show all children Columns).</span>
<span class="c"> *</span>
<span class="c"> * @method showColumn</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> */</span>
<span class="nx">showColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(!(</span><span class="nx">oColumn</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Column</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Only top-level Columns can get hidden</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span> <span class="o">&amp;&amp;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">hidden</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getTreeIndex</span><span class="o">()</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">allrows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTbodyEl</span><span class="o">().</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">l</span> <span class="o">=</span> <span class="nx">allrows</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">allDescendants</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">getDescendants</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="c">// Show each nested Column</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">allDescendants</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">thisColumn</span> <span class="o">=</span> <span class="nx">allDescendants</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="nx">thisColumn</span><span class="o">.</span><span class="nx">hidden</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="c">// Unstyle the head cell</span>
<span class="c"></span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">thisColumn</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">(),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_HIDDEN</span><span class="o">);</span>
<span class="c">// Does this Column have body cells?</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">thisKeyIndex</span> <span class="o">=</span> <span class="nx">thisColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">thisKeyIndex</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Restore minWidth</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_restoreMinWidth</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="c">// Unstyle the body cells</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">;</span><span class="nx">j</span><span class="o">&lt;</span><span class="nx">l</span><span class="o">;</span><span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">allrows</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">thisKeyIndex</span><span class="o">],</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_HIDDEN</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;columnShowEvent&quot;</span><span class="o">,{</span><span class="nx">column</span><span class="o">:</span><span class="nx">thisColumn</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot; shown&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_clearTrTemplateEl</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not show Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">dump</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">+</span> <span class="s2">&quot;\&quot;. Only non-nested Columns can be shown&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Removes given Column. NOTE: You cannot remove nested Columns. You can only remove</span>
<span class="c"> * non-nested Columns, and top-level parent Columns (which will remove all</span>
<span class="c"> * children Columns).</span>
<span class="c"> *</span>
<span class="c"> * @method removeColumn</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @return oColumn {YAHOO.widget.Column} Removed Column instance.</span>
<span class="c"> */</span>
<span class="nx">removeColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Validate Column</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!(</span><span class="nx">oColumn</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Column</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nColTreeIndex</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getTreeIndex</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">nColTreeIndex</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Which key index(es)</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">i</span><span class="o">,</span> <span class="nx">len</span><span class="o">,</span>
<span class="nx">aKeyIndexes</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="c">// Must be a parent Column</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">aKeyIndexes</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">descKeyIndexes</span> <span class="o">=</span> <span class="o">[];</span>
<span class="k">var</span> <span class="nx">allDescendants</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">getDescendants</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="nx">allDescendants</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="c">// Is this descendant a key Column?</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">thisKey</span> <span class="o">=</span> <span class="nx">allDescendants</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">thisKey</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">descKeyIndexes</span><span class="o">[</span><span class="nx">descKeyIndexes</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">thisKey</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">descKeyIndexes</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">aKeyIndexes</span> <span class="o">=</span> <span class="nx">descKeyIndexes</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Must be a key Column</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">aKeyIndexes</span> <span class="o">=</span> <span class="o">[</span><span class="nx">aKeyIndexes</span><span class="o">];</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">aKeyIndexes</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Sort the indexes so we can remove from the right</span>
<span class="c"></span> <span class="nx">aKeyIndexes</span><span class="o">.</span><span class="nx">sort</span><span class="o">(</span><span class="k">function</span><span class="o">(</span><span class="nx">a</span><span class="o">,</span> <span class="nx">b</span><span class="o">)</span> <span class="o">{</span><span class="k">return</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">Sort</span><span class="o">.</span><span class="nx">compare</span><span class="o">(</span><span class="nx">a</span><span class="o">,</span> <span class="nx">b</span><span class="o">);});</span>
<span class="c">// Destroy previous THEAD</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_destroyTheadEl</span><span class="o">();</span>
<span class="c">// Create new THEAD</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">aOrigColumnDefs</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">getDefinitions</span><span class="o">();</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="nx">aOrigColumnDefs</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">nColTreeIndex</span><span class="o">,</span><span class="m">1</span><span class="o">)[</span><span class="m">0</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_initColumnSet</span><span class="o">(</span><span class="nx">aOrigColumnDefs</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_initTheadEl</span><span class="o">();</span>
<span class="c">// Remove COL</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">aKeyIndexes</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_removeColgroupColEl</span><span class="o">(</span><span class="nx">aKeyIndexes</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="c">// Remove TD</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">loopN</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;renderLoopSize&quot;</span><span class="o">),</span>
<span class="nx">loopEnd</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRow</span><span class="o">,</span>
<span class="nx">len</span> <span class="o">=</span> <span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span> <span class="o">?</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">min</span><span class="o">(</span><span class="nx">i</span> <span class="o">+</span> <span class="nx">loopN</span><span class="o">,</span><span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">)</span> <span class="o">:</span> <span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">,</span>
<span class="nx">aIndexes</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">aIndexes</span><span class="o">,</span>
<span class="nx">j</span><span class="o">;</span>
<span class="k">for</span><span class="o">(;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">len</span><span class="o">;</span> <span class="o">++</span><span class="nx">i</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span> <span class="o">=</span> <span class="nx">aIndexes</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">aIndexes</span><span class="o">[</span><span class="nx">j</span><span class="o">]]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRow</span> <span class="o">=</span> <span class="nx">i</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">iterations</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">ceil</span><span class="o">(</span><span class="nx">loopEnd</span><span class="o">/</span><span class="nx">loopN</span><span class="o">)</span> <span class="o">:</span> <span class="m">1</span><span class="o">,</span>
<span class="nx">argument</span><span class="o">:</span> <span class="o">{</span><span class="nx">nCurrentRow</span><span class="o">:</span><span class="m">0</span><span class="o">,</span> <span class="nx">aIndexes</span><span class="o">:</span><span class="nx">aKeyIndexes</span><span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="m">0</span> <span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;columnRemoveEvent&quot;</span><span class="o">,{</span><span class="nx">column</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot; removed&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="nx">oColumn</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not remove Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot;. Only non-nested Columns can be removed&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Inserts given Column at the index if given, otherwise at the end. NOTE: You</span>
<span class="c"> * can only add non-nested Columns and top-level parent Columns. You cannot add</span>
<span class="c"> * a nested Column to an existing parent.</span>
<span class="c"> *</span>
<span class="c"> * @method insertColumn</span>
<span class="c"> * @param oColumn {Object | YAHOO.widget.Column} Object literal Column</span>
<span class="c"> * definition or a Column instance.</span>
<span class="c"> * @param index {Number} (optional) New tree index.</span>
<span class="c"> * @return oColumn {YAHOO.widget.Column} Inserted Column instance. </span>
<span class="c"> */</span>
<span class="nx">insertColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">index</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Validate Column</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Column</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getDefinition</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">constructor</span> <span class="o">!==</span> <span class="nb">Object</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not insert Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span> <span class="o">+</span> <span class="s2">&quot;\&quot; due to invalid argument&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Validate index or append new Column to the end of the ColumnSet</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oColumnSet</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">;</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">index</span><span class="o">)</span> <span class="o">||</span> <span class="o">!</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">index</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">index</span> <span class="o">=</span> <span class="nx">oColumnSet</span><span class="o">.</span><span class="nx">tree</span><span class="o">[</span><span class="m">0</span><span class="o">].</span><span class="nx">length</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Destroy previous THEAD</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_destroyTheadEl</span><span class="o">();</span>
<span class="c">// Create new THEAD</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">aNewColumnDefs</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">getDefinitions</span><span class="o">();</span>
<span class="nx">aNewColumnDefs</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">index</span><span class="o">,</span> <span class="m">0</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_initColumnSet</span><span class="o">(</span><span class="nx">aNewColumnDefs</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_initTheadEl</span><span class="o">();</span>
<span class="c">// Need to refresh the reference</span>
<span class="c"></span> <span class="nx">oColumnSet</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">oNewColumn</span> <span class="o">=</span> <span class="nx">oColumnSet</span><span class="o">.</span><span class="nx">tree</span><span class="o">[</span><span class="m">0</span><span class="o">][</span><span class="nx">index</span><span class="o">];</span>
<span class="c">// Get key index(es) for new Column</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">i</span><span class="o">,</span> <span class="nx">len</span><span class="o">,</span>
<span class="nx">descKeyIndexes</span> <span class="o">=</span> <span class="o">[];</span>
<span class="k">var</span> <span class="nx">allDescendants</span> <span class="o">=</span> <span class="nx">oColumnSet</span><span class="o">.</span><span class="nx">getDescendants</span><span class="o">(</span><span class="nx">oNewColumn</span><span class="o">);</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="nx">allDescendants</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="c">// Is this descendant a key Column?</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">thisKey</span> <span class="o">=</span> <span class="nx">allDescendants</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">thisKey</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">descKeyIndexes</span><span class="o">[</span><span class="nx">descKeyIndexes</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">thisKey</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">descKeyIndexes</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Sort the indexes</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">newIndex</span> <span class="o">=</span> <span class="nx">descKeyIndexes</span><span class="o">.</span><span class="nx">sort</span><span class="o">(</span><span class="k">function</span><span class="o">(</span><span class="nx">a</span><span class="o">,</span> <span class="nx">b</span><span class="o">)</span> <span class="o">{</span><span class="k">return</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">Sort</span><span class="o">.</span><span class="nx">compare</span><span class="o">(</span><span class="nx">a</span><span class="o">,</span> <span class="nx">b</span><span class="o">);})[</span><span class="m">0</span><span class="o">];</span>
<span class="c">// Add COL</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">descKeyIndexes</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_insertColgroupColEl</span><span class="o">(</span><span class="nx">descKeyIndexes</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="c">// Add TD</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">loopN</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;renderLoopSize&quot;</span><span class="o">),</span>
<span class="nx">loopEnd</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span>
<span class="c">// Get templates for each new TD</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">aTdTemplates</span> <span class="o">=</span> <span class="o">[],</span>
<span class="nx">elTdTemplate</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="nx">descKeyIndexes</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">thisKeyIndex</span> <span class="o">=</span> <span class="nx">descKeyIndexes</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="nx">elTdTemplate</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getTrTemplateEl</span><span class="o">().</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cloneNode</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="nx">elTdTemplate</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_formatTdEl</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">[</span><span class="nx">thisKeyIndex</span><span class="o">],</span> <span class="nx">elTdTemplate</span><span class="o">,</span> <span class="nx">thisKeyIndex</span><span class="o">,</span> <span class="o">(</span><span class="nx">thisKeyIndex</span><span class="o">===</span><span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">));</span>
<span class="nx">aTdTemplates</span><span class="o">[</span><span class="nx">thisKeyIndex</span><span class="o">]</span> <span class="o">=</span> <span class="nx">elTdTemplate</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRow</span><span class="o">,</span> <span class="nx">j</span><span class="o">,</span>
<span class="nx">descKeyIndexes</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">descKeyIndexes</span><span class="o">,</span>
<span class="nx">len</span> <span class="o">=</span> <span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span> <span class="o">?</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">min</span><span class="o">(</span><span class="nx">i</span> <span class="o">+</span> <span class="nx">loopN</span><span class="o">,</span><span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">)</span> <span class="o">:</span> <span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">,</span>
<span class="nx">nextSibling</span><span class="o">;</span>
<span class="k">for</span><span class="o">(;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">len</span><span class="o">;</span> <span class="o">++</span><span class="nx">i</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">nextSibling</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">newIndex</span><span class="o">]</span> <span class="o">||</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="nx">descKeyIndexes</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">aTdTemplates</span><span class="o">[</span><span class="nx">descKeyIndexes</span><span class="o">[</span><span class="nx">j</span><span class="o">]].</span><span class="nx">cloneNode</span><span class="o">(</span><span class="kc">true</span><span class="o">),</span> <span class="nx">nextSibling</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRow</span> <span class="o">=</span> <span class="nx">i</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">iterations</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">ceil</span><span class="o">(</span><span class="nx">loopEnd</span><span class="o">/</span><span class="nx">loopN</span><span class="o">)</span> <span class="o">:</span> <span class="m">1</span><span class="o">,</span>
<span class="nx">argument</span><span class="o">:</span> <span class="o">{</span><span class="nx">nCurrentRow</span><span class="o">:</span><span class="m">0</span><span class="o">,</span><span class="nx">aTdTemplates</span><span class="o">:</span><span class="nx">aTdTemplates</span><span class="o">,</span><span class="nx">descKeyIndexes</span><span class="o">:</span><span class="nx">descKeyIndexes</span><span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="m">0</span> <span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;columnInsertEvent&quot;</span><span class="o">,{</span><span class="nx">column</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">,</span><span class="nx">index</span><span class="o">:</span><span class="nx">index</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot; inserted into index &quot;</span> <span class="o">+</span> <span class="nx">index</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="nx">oNewColumn</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Removes given Column and inserts into given tree index. NOTE: You</span>
<span class="c"> * can only reorder non-nested Columns and top-level parent Columns. You cannot</span>
<span class="c"> * reorder a nested Column to an existing parent.</span>
<span class="c"> *</span>
<span class="c"> * @method reorderColumn</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} Column instance.</span>
<span class="c"> * @param index {Number} New tree index.</span>
<span class="c"> * @return oColumn {YAHOO.widget.Column} Reordered Column instance. </span>
<span class="c"> */</span>
<span class="nx">reorderColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">index</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Validate Column and new index</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!(</span><span class="nx">oColumn</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Column</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span> <span class="o">&amp;&amp;</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">index</span><span class="o">))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nOrigTreeIndex</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getTreeIndex</span><span class="o">();</span>
<span class="k">if</span><span class="o">((</span><span class="nx">nOrigTreeIndex</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">nOrigTreeIndex</span> <span class="o">!==</span> <span class="nx">index</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Which key index(es)</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">i</span><span class="o">,</span> <span class="nx">len</span><span class="o">,</span>
<span class="nx">aOrigKeyIndexes</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">(),</span>
<span class="nx">allDescendants</span><span class="o">,</span>
<span class="nx">descKeyIndexes</span> <span class="o">=</span> <span class="o">[],</span>
<span class="nx">thisKey</span><span class="o">;</span>
<span class="c">// Must be a parent Column...</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">aOrigKeyIndexes</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">allDescendants</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">getDescendants</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="nx">allDescendants</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="c">// Is this descendant a key Column?</span>
<span class="c"></span> <span class="nx">thisKey</span> <span class="o">=</span> <span class="nx">allDescendants</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">thisKey</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">descKeyIndexes</span><span class="o">[</span><span class="nx">descKeyIndexes</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">thisKey</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">descKeyIndexes</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">aOrigKeyIndexes</span> <span class="o">=</span> <span class="nx">descKeyIndexes</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// ...or else must be a key Column</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">aOrigKeyIndexes</span> <span class="o">=</span> <span class="o">[</span><span class="nx">aOrigKeyIndexes</span><span class="o">];</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">aOrigKeyIndexes</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Sort the indexes</span>
<span class="c"></span> <span class="nx">aOrigKeyIndexes</span><span class="o">.</span><span class="nx">sort</span><span class="o">(</span><span class="k">function</span><span class="o">(</span><span class="nx">a</span><span class="o">,</span> <span class="nx">b</span><span class="o">)</span> <span class="o">{</span><span class="k">return</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">Sort</span><span class="o">.</span><span class="nx">compare</span><span class="o">(</span><span class="nx">a</span><span class="o">,</span> <span class="nx">b</span><span class="o">);});</span>
<span class="c">// Destroy previous THEAD</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_destroyTheadEl</span><span class="o">();</span>
<span class="c">// Create new THEAD</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">aColumnDefs</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">getDefinitions</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">oColumnDef</span> <span class="o">=</span> <span class="nx">aColumnDefs</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">nOrigTreeIndex</span><span class="o">,</span><span class="m">1</span><span class="o">)[</span><span class="m">0</span><span class="o">];</span>
<span class="nx">aColumnDefs</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">index</span><span class="o">,</span> <span class="m">0</span><span class="o">,</span> <span class="nx">oColumnDef</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_initColumnSet</span><span class="o">(</span><span class="nx">aColumnDefs</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_initTheadEl</span><span class="o">();</span>
<span class="c">// Need to refresh the reference</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oNewColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">tree</span><span class="o">[</span><span class="m">0</span><span class="o">][</span><span class="nx">index</span><span class="o">];</span>
<span class="c">// What are new key index(es)</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">aNewKeyIndexes</span> <span class="o">=</span> <span class="nx">oNewColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="c">// Must be a parent Column</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">aNewKeyIndexes</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">descKeyIndexes</span> <span class="o">=</span> <span class="o">[];</span>
<span class="nx">allDescendants</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">getDescendants</span><span class="o">(</span><span class="nx">oNewColumn</span><span class="o">);</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="nx">allDescendants</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="c">// Is this descendant a key Column?</span>
<span class="c"></span> <span class="nx">thisKey</span> <span class="o">=</span> <span class="nx">allDescendants</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">thisKey</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">descKeyIndexes</span><span class="o">[</span><span class="nx">descKeyIndexes</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">thisKey</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">descKeyIndexes</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">aNewKeyIndexes</span> <span class="o">=</span> <span class="nx">descKeyIndexes</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Must be a key Column</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">aNewKeyIndexes</span> <span class="o">=</span> <span class="o">[</span><span class="nx">aNewKeyIndexes</span><span class="o">];</span>
<span class="o">}</span>
<span class="c">// Sort the new indexes and grab the first one for the new location</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">newIndex</span> <span class="o">=</span> <span class="nx">aNewKeyIndexes</span><span class="o">.</span><span class="nx">sort</span><span class="o">(</span><span class="k">function</span><span class="o">(</span><span class="nx">a</span><span class="o">,</span> <span class="nx">b</span><span class="o">)</span> <span class="o">{</span><span class="k">return</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">Sort</span><span class="o">.</span><span class="nx">compare</span><span class="o">(</span><span class="nx">a</span><span class="o">,</span> <span class="nx">b</span><span class="o">);})[</span><span class="m">0</span><span class="o">];</span>
<span class="c">// Reorder COL</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_reorderColgroupColEl</span><span class="o">(</span><span class="nx">aOrigKeyIndexes</span><span class="o">,</span> <span class="nx">newIndex</span><span class="o">);</span>
<span class="c">// Reorder TD</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">loopN</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;renderLoopSize&quot;</span><span class="o">),</span>
<span class="nx">loopEnd</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRow</span><span class="o">,</span> <span class="nx">j</span><span class="o">,</span> <span class="nx">tmpTds</span><span class="o">,</span> <span class="nx">nextSibling</span><span class="o">,</span>
<span class="nx">len</span> <span class="o">=</span> <span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span> <span class="o">?</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">min</span><span class="o">(</span><span class="nx">i</span> <span class="o">+</span> <span class="nx">loopN</span><span class="o">,</span><span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">)</span> <span class="o">:</span> <span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">,</span>
<span class="nx">aIndexes</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">aIndexes</span><span class="o">,</span> <span class="nx">thisTr</span><span class="o">;</span>
<span class="c">// For each row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">len</span><span class="o">;</span> <span class="o">++</span><span class="nx">i</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">tmpTds</span> <span class="o">=</span> <span class="o">[];</span>
<span class="nx">thisTr</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="c">// Remove each TD</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="nx">aIndexes</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="nx">tmpTds</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">thisTr</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">thisTr</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">aIndexes</span><span class="o">[</span><span class="nx">j</span><span class="o">]]));</span>
<span class="o">}</span>
<span class="c">// Insert each TD</span>
<span class="c"></span> <span class="nx">nextSibling</span> <span class="o">=</span> <span class="nx">thisTr</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">newIndex</span><span class="o">]</span> <span class="o">||</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="nx">tmpTds</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="nx">thisTr</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nx">tmpTds</span><span class="o">[</span><span class="nx">j</span><span class="o">],</span> <span class="nx">nextSibling</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRow</span> <span class="o">=</span> <span class="nx">i</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">iterations</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">ceil</span><span class="o">(</span><span class="nx">loopEnd</span><span class="o">/</span><span class="nx">loopN</span><span class="o">)</span> <span class="o">:</span> <span class="m">1</span><span class="o">,</span>
<span class="nx">argument</span><span class="o">:</span> <span class="o">{</span><span class="nx">nCurrentRow</span><span class="o">:</span><span class="m">0</span><span class="o">,</span> <span class="nx">aIndexes</span><span class="o">:</span><span class="nx">aOrigKeyIndexes</span><span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="m">0</span> <span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;columnReorderEvent&quot;</span><span class="o">,{</span><span class="nx">column</span><span class="o">:</span><span class="nx">oNewColumn</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oNewColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot; reordered&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="nx">oNewColumn</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not reorder Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot;. Only non-nested Columns can be reordered&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Selects given Column. NOTE: You cannot select/unselect nested Columns. You can only</span>
<span class="c"> * select/unselect non-nested Columns, and bottom-level key Columns.</span>
<span class="c"> *</span>
<span class="c"> * @method selectColumn</span>
<span class="c"> * @param column {HTMLElement | String | Number} DOM reference or ID string to a</span>
<span class="c"> * TH/TD element (or child of a TH/TD element), a Column key, or a ColumnSet key index.</span>
<span class="c"> */</span>
<span class="nx">selectColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">selected</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Only bottom-level Columns can get hidden</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">selected</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="c">// Update head cell</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTh</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">();</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elTh</span><span class="o">,</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">);</span>
<span class="c">// Update body cells</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTbodyEl</span><span class="o">().</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">oChainRender</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">;</span>
<span class="nx">oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span> <span class="o">&amp;&amp;</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">]</span> <span class="o">&amp;&amp;</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">])</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">],</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">++;</span>
<span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">iterations</span><span class="o">:</span> <span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">,</span>
<span class="nx">argument</span><span class="o">:</span> <span class="o">{</span><span class="nx">rowIndex</span><span class="o">:</span><span class="m">0</span><span class="o">,</span><span class="nx">cellIndex</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()}</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_clearTrTemplateEl</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;columnSelectEvent&quot;</span><span class="o">,{</span><span class="nx">column</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot; selected&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not select Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot;. Only non-nested Columns can be selected&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Unselects given Column. NOTE: You cannot select/unselect nested Columns. You can only</span>
<span class="c"> * select/unselect non-nested Columns, and bottom-level key Columns.</span>
<span class="c"> *</span>
<span class="c"> * @method unselectColumn</span>
<span class="c"> * @param column {HTMLElement | String | Number} DOM reference or ID string to a</span>
<span class="c"> * TH/TD element (or child of a TH/TD element), a Column key, or a ColumnSet key index.</span>
<span class="c"> */</span>
<span class="nx">unselectColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span> <span class="o">&amp;&amp;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">selected</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Only bottom-level Columns can get hidden</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">selected</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="c">// Update head cell</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTh</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">();</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">elTh</span><span class="o">,</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">);</span>
<span class="c">// Update body cells</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTbodyEl</span><span class="o">().</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">oChainRender</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">;</span>
<span class="nx">oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span> <span class="o">&amp;&amp;</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">]</span> <span class="o">&amp;&amp;</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">])</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">],</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">++;</span>
<span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">iterations</span><span class="o">:</span><span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">,</span>
<span class="nx">argument</span><span class="o">:</span> <span class="o">{</span><span class="nx">rowIndex</span><span class="o">:</span><span class="m">0</span><span class="o">,</span><span class="nx">cellIndex</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()}</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_clearTrTemplateEl</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;columnUnselectEvent&quot;</span><span class="o">,{</span><span class="nx">column</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot; unselected&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not unselect Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot;. Only non-nested Columns can be unselected&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns an array selected Column instances.</span>
<span class="c"> *</span>
<span class="c"> * @method getSelectedColumns</span>
<span class="c"> * @return {YAHOO.widget.Column[]} Array of Column instances.</span>
<span class="c"> */</span>
<span class="nx">getSelectedColumns</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">selectedColumns</span> <span class="o">=</span> <span class="o">[];</span>
<span class="k">var</span> <span class="nx">aKeys</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oColumnSet</span><span class="o">.</span><span class="nx">keys</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">,</span><span class="nx">len</span><span class="o">=</span><span class="nx">aKeys</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">aKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">selected</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">selectedColumns</span><span class="o">[</span><span class="nx">selectedColumns</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">aKeys</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">selectedColumns</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Assigns the class YAHOO.widget.DataTable.CLASS_HIGHLIGHTED to cells of the given Column.</span>
<span class="c"> * NOTE: You cannot highlight/unhighlight nested Columns. You can only</span>
<span class="c"> * highlight/unhighlight non-nested Columns, and bottom-level key Columns.</span>
<span class="c"> *</span>
<span class="c"> * @method highlightColumn</span>
<span class="c"> * @param column {HTMLElement | String | Number} DOM reference or ID string to a</span>
<span class="c"> * TH/TD element (or child of a TH/TD element), a Column key, or a ColumnSet key index.</span>
<span class="c"> */</span>
<span class="nx">highlightColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">column</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">column</span><span class="o">);</span>
<span class="c">// Only bottom-level Columns can get highlighted</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Update head cell</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTh</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">();</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elTh</span><span class="o">,</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_HIGHLIGHTED</span><span class="o">);</span>
<span class="c">// Update body cells</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTbodyEl</span><span class="o">().</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">oChainRender</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">;</span>
<span class="nx">oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span> <span class="o">&amp;&amp;</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">]</span> <span class="o">&amp;&amp;</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">])</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">],</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_HIGHLIGHTED</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">++;</span>
<span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">iterations</span><span class="o">:</span><span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">,</span>
<span class="nx">argument</span><span class="o">:</span> <span class="o">{</span><span class="nx">rowIndex</span><span class="o">:</span><span class="m">0</span><span class="o">,</span><span class="nx">cellIndex</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()},</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;columnHighlightEvent&quot;</span><span class="o">,{</span><span class="nx">column</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot; highlighed&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not highlight Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot;. Only non-nested Columns can be highlighted&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Removes the class YAHOO.widget.DataTable.CLASS_HIGHLIGHTED to cells of the given Column.</span>
<span class="c"> * NOTE: You cannot highlight/unhighlight nested Columns. You can only</span>
<span class="c"> * highlight/unhighlight non-nested Columns, and bottom-level key Columns.</span>
<span class="c"> *</span>
<span class="c"> * @method unhighlightColumn</span>
<span class="c"> * @param column {HTMLElement | String | Number} DOM reference or ID string to a</span>
<span class="c"> * TH/TD element (or child of a TH/TD element), a Column key, or a ColumnSet key index.</span>
<span class="c"> */</span>
<span class="nx">unhighlightColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">column</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">column</span><span class="o">);</span>
<span class="c">// Only bottom-level Columns can get highlighted</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()</span> <span class="o">!==</span> <span class="kc">null</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Update head cell</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTh</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">();</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">elTh</span><span class="o">,</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_HIGHLIGHTED</span><span class="o">);</span>
<span class="c">// Update body cells</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTbodyEl</span><span class="o">().</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">oChainRender</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">;</span>
<span class="nx">oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span> <span class="o">&amp;&amp;</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">]</span> <span class="o">&amp;&amp;</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">])</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oArg</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">],</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_HIGHLIGHTED</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">oArg</span><span class="o">.</span><span class="nx">rowIndex</span><span class="o">++;</span>
<span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">iterations</span><span class="o">:</span><span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">,</span>
<span class="nx">argument</span><span class="o">:</span> <span class="o">{</span><span class="nx">rowIndex</span><span class="o">:</span><span class="m">0</span><span class="o">,</span><span class="nx">cellIndex</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">()},</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;columnUnhighlightEvent&quot;</span><span class="o">,{</span><span class="nx">column</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot; unhighlighted&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not unhighlight Column \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span> <span class="o">+</span> <span class="s2">&quot;\&quot;. Only non-nested Columns can be unhighlighted&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">// ROW FUNCTIONS</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Adds one new Record of data into the RecordSet at the index if given,</span>
<span class="c"> * otherwise at the end. If the new Record is in page view, the</span>
<span class="c"> * corresponding DOM elements are also updated.</span>
<span class="c"> *</span>
<span class="c"> * @method addRow</span>
<span class="c"> * @param oData {Object} Object literal of data for the row.</span>
<span class="c"> * @param index {Number} (optional) RecordSet position index at which to add data.</span>
<span class="c"> */</span>
<span class="nx">addRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oData</span><span class="o">,</span> <span class="nx">index</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oData</span> <span class="o">&amp;&amp;</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isObject</span><span class="o">(</span><span class="nx">oData</span><span class="o">))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">addRecord</span><span class="o">(</span><span class="nx">oData</span><span class="o">,</span> <span class="nx">index</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">recIndex</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">oPaginator</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">);</span>
<span class="c">// Paginated</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(</span><span class="nx">oPaginator</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Update the paginator&#39;s totalRecords</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">totalRecords</span> <span class="o">=</span> <span class="nx">oPaginator</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;totalRecords&#39;</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">totalRecords</span> <span class="o">!==</span> <span class="nx">widget</span><span class="o">.</span><span class="nx">Paginator</span><span class="o">.</span><span class="nx">VALUE_UNLIMITED</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oPaginator</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;totalRecords&#39;</span><span class="o">,</span><span class="nx">totalRecords</span> <span class="o">+</span> <span class="m">1</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">recIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">endRecIndex</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oPaginator</span><span class="o">.</span><span class="nx">getPageRecords</span><span class="o">())[</span><span class="m">1</span><span class="o">];</span>
<span class="c">// New record affects the view</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(</span><span class="nx">recIndex</span> <span class="o">&lt;=</span> <span class="nx">endRecIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Defer UI updates to the render method</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">render</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowAddEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Added a row for Record &quot;</span> <span class="o">+</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">lang</span><span class="o">.</span><span class="nx">dump</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">+</span> <span class="s2">&quot; at RecordSet index &quot;</span> <span class="o">+</span> <span class="nx">recIndex</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Not paginated</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">recIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">recIndex</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Add the TR element</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oRecord</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">record</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">recIndex</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">recIndex</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elNewTr</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_addTrEl</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elNewTr</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elNext</span> <span class="o">=</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">[</span><span class="nx">recIndex</span><span class="o">])</span> <span class="o">?</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">[</span><span class="nx">recIndex</span><span class="o">]</span> <span class="o">:</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nx">elNewTr</span><span class="o">,</span> <span class="nx">elNext</span><span class="o">);</span>
<span class="c">// Set FIRST/LAST</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">recIndex</span> <span class="o">===</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setFirstRow</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elNext</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setLastRow</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">// Set EVEN/ODD</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_setRowStripes</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">hideTableMessage</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowAddEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Added a row for Record &quot;</span> <span class="o">+</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">lang</span><span class="o">.</span><span class="nx">dump</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">+</span> <span class="s2">&quot; at RecordSet index &quot;</span> <span class="o">+</span> <span class="nx">recIndex</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">argument</span><span class="o">:</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">recIndex</span><span class="o">:</span> <span class="nx">recIndex</span><span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;renderLoopSize&quot;</span><span class="o">)</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="m">0</span> <span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not add row with &quot;</span> <span class="o">+</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">dump</span><span class="o">(</span><span class="nx">oData</span><span class="o">),</span> <span class="s2">&quot;error&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Convenience method to add multiple rows.</span>
<span class="c"> *</span>
<span class="c"> * @method addRows</span>
<span class="c"> * @param aData {Object[]} Array of object literal data for the rows.</span>
<span class="c"> * @param index {Number} (optional) RecordSet position index at which to add data.</span>
<span class="c"> */</span>
<span class="nx">addRows</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">aData</span><span class="o">,</span> <span class="nx">index</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isArray</span><span class="o">(</span><span class="nx">aData</span><span class="o">))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">aRecords</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">addRecords</span><span class="o">(</span><span class="nx">aData</span><span class="o">,</span> <span class="nx">index</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">aRecords</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">recIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">aRecords</span><span class="o">[</span><span class="m">0</span><span class="o">]);</span>
<span class="c">// Paginated</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oPaginator</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oPaginator</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Update the paginator&#39;s totalRecords</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">totalRecords</span> <span class="o">=</span> <span class="nx">oPaginator</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;totalRecords&#39;</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">totalRecords</span> <span class="o">!==</span> <span class="nx">widget</span><span class="o">.</span><span class="nx">Paginator</span><span class="o">.</span><span class="nx">VALUE_UNLIMITED</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oPaginator</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;totalRecords&#39;</span><span class="o">,</span><span class="nx">totalRecords</span> <span class="o">+</span> <span class="nx">aRecords</span><span class="o">.</span><span class="nx">length</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">var</span> <span class="nx">endRecIndex</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oPaginator</span><span class="o">.</span><span class="nx">getPageRecords</span><span class="o">())[</span><span class="m">1</span><span class="o">];</span>
<span class="c">// At least one of the new records affects the view</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(</span><span class="nx">recIndex</span> <span class="o">&lt;=</span> <span class="nx">endRecIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">render</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowsAddEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">records</span><span class="o">:</span><span class="nx">aRecords</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Added &quot;</span> <span class="o">+</span> <span class="nx">aRecords</span><span class="o">.</span><span class="nx">length</span> <span class="o">+</span>
<span class="s2">&quot; rows at index &quot;</span> <span class="o">+</span> <span class="nx">recIndex</span> <span class="o">+</span>
<span class="s2">&quot; with data &quot;</span> <span class="o">+</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">dump</span><span class="o">(</span><span class="nx">aData</span><span class="o">),</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Not paginated</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Add the TR elements</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">loopN</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;renderLoopSize&quot;</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">loopEnd</span> <span class="o">=</span> <span class="nx">recIndex</span> <span class="o">+</span> <span class="nx">aData</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">nRowsNeeded</span> <span class="o">=</span> <span class="o">(</span><span class="nx">loopEnd</span> <span class="o">-</span> <span class="nx">recIndex</span><span class="o">);</span> <span class="c">// how many needed</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">aRecords</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">aRecords</span><span class="o">,</span>
<span class="nx">i</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRow</span><span class="o">,</span>
<span class="nx">j</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRecord</span><span class="o">,</span>
<span class="nx">len</span> <span class="o">=</span> <span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span> <span class="o">?</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">min</span><span class="o">(</span><span class="nx">i</span> <span class="o">+</span> <span class="nx">loopN</span><span class="o">,</span><span class="nx">loopEnd</span><span class="o">)</span> <span class="o">:</span> <span class="nx">loopEnd</span><span class="o">,</span>
<span class="nx">df</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createDocumentFragment</span><span class="o">(),</span>
<span class="nx">tr</span><span class="o">;</span>
<span class="k">for</span><span class="o">(;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">len</span><span class="o">;</span> <span class="o">++</span><span class="nx">i</span><span class="o">,++</span><span class="nx">j</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">df</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_addTrEl</span><span class="o">(</span><span class="nx">aRecords</span><span class="o">[</span><span class="nx">j</span><span class="o">]));</span>
<span class="o">}</span>
<span class="k">var</span> <span class="nx">elNext</span> <span class="o">=</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">[</span><span class="nx">index</span><span class="o">])</span> <span class="o">?</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">[</span><span class="nx">index</span><span class="o">]</span> <span class="o">:</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nx">df</span><span class="o">,</span> <span class="nx">elNext</span><span class="o">);</span>
<span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRow</span> <span class="o">=</span> <span class="nx">i</span><span class="o">;</span>
<span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRecord</span> <span class="o">=</span> <span class="nx">j</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">iterations</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">ceil</span><span class="o">(</span><span class="nx">loopEnd</span><span class="o">/</span><span class="nx">loopN</span><span class="o">)</span> <span class="o">:</span> <span class="m">1</span><span class="o">,</span>
<span class="nx">argument</span><span class="o">:</span> <span class="o">{</span><span class="nx">nCurrentRow</span><span class="o">:</span><span class="nx">recIndex</span><span class="o">,</span><span class="nx">nCurrentRecord</span><span class="o">:</span><span class="m">0</span><span class="o">,</span><span class="nx">aRecords</span><span class="o">:</span><span class="nx">aRecords</span><span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="m">0</span> <span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">recIndex</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">recIndex</span><span class="o">;</span>
<span class="c">// Set FIRST/LAST</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">recIndex</span> <span class="o">===</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setFirstRow</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">recIndex</span> <span class="o">===</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setLastRow</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">// Set EVEN/ODD</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_setRowStripes</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowsAddEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">records</span><span class="o">:</span><span class="nx">aRecords</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Added &quot;</span> <span class="o">+</span> <span class="nx">aRecords</span><span class="o">.</span><span class="nx">length</span> <span class="o">+</span>
<span class="s2">&quot; rows at index &quot;</span> <span class="o">+</span> <span class="nx">recIndex</span> <span class="o">+</span>
<span class="s2">&quot; with data &quot;</span> <span class="o">+</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">dump</span><span class="o">(</span><span class="nx">aData</span><span class="o">),</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="nx">argument</span><span class="o">:</span> <span class="o">{</span><span class="nx">recIndex</span><span class="o">:</span> <span class="nx">recIndex</span><span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">-</span><span class="m">1</span> <span class="c">// Needs to run immediately after the DOM insertions above</span>
<span class="c"></span> <span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">hideTableMessage</span><span class="o">();</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not add rows with &quot;</span> <span class="o">+</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">dump</span><span class="o">(</span><span class="nx">aData</span><span class="o">));</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * For the given row, updates the associated Record with the given data. If the</span>
<span class="c"> * row is on current page, the corresponding DOM elements are also updated.</span>
<span class="c"> *</span>
<span class="c"> * @method updateRow</span>
<span class="c"> * @param row {YAHOO.widget.Record | Number | HTMLElement | String}</span>
<span class="c"> * Which row to update: By Record instance, by Record&#39;s RecordSet</span>
<span class="c"> * position index, by HTMLElement reference to the TR element, or by ID string</span>
<span class="c"> * of the TR element.</span>
<span class="c"> * @param oData {Object} Object literal of data for the row.</span>
<span class="c"> */</span>
<span class="nx">updateRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oldRecord</span><span class="o">,</span> <span class="nx">oldData</span><span class="o">,</span> <span class="nx">updatedRecord</span><span class="o">,</span> <span class="nx">elRow</span><span class="o">;</span>
<span class="c">// Get the Record directly</span>
<span class="c"></span> <span class="k">if</span><span class="o">((</span><span class="nx">row</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Record</span><span class="o">)</span> <span class="o">||</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">row</span><span class="o">)))</span> <span class="o">{</span>
<span class="c">// Get the Record directly</span>
<span class="c"></span> <span class="nx">oldRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="c">// Is this row on current page?</span>
<span class="c"></span> <span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">oldRecord</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Get the Record by TR element</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elRow</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oldRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elRow</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Update the Record</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oldRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Copy data from the Record for the event that gets fired later</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oRecordData</span> <span class="o">=</span> <span class="nx">oldRecord</span><span class="o">.</span><span class="nx">getData</span><span class="o">();</span>
<span class="nx">oldData</span> <span class="o">=</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">DataTable</span><span class="o">.</span><span class="nx">_cloneObject</span><span class="o">(</span><span class="nx">oRecordData</span><span class="o">);</span>
<span class="nx">updatedRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">updateRecord</span><span class="o">(</span><span class="nx">oldRecord</span><span class="o">,</span> <span class="nx">oData</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not update row &quot;</span> <span class="o">+</span> <span class="nx">row</span> <span class="o">+</span> <span class="s2">&quot; with the data : &quot;</span> <span class="o">+</span>
<span class="nx">lang</span><span class="o">.</span><span class="nx">dump</span><span class="o">(</span><span class="nx">oData</span><span class="o">),</span> <span class="s2">&quot;error&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Update the TR only if row is on current page</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elRow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_updateTrEl</span><span class="o">(</span><span class="nx">elRow</span><span class="o">,</span> <span class="nx">updatedRecord</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowUpdateEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">updatedRecord</span><span class="o">,</span> <span class="nx">oldData</span><span class="o">:</span><span class="nx">oldData</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;DataTable row updated: Record ID = &quot;</span> <span class="o">+</span> <span class="nx">updatedRecord</span><span class="o">.</span><span class="nx">getId</span><span class="o">()</span> <span class="o">+</span>
<span class="s2">&quot;, Record index = &quot;</span> <span class="o">+</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">updatedRecord</span><span class="o">)</span> <span class="o">+</span>
<span class="s2">&quot;, page row index = &quot;</span> <span class="o">+</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">updatedRecord</span><span class="o">),</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;renderLoopSize&quot;</span><span class="o">)</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="m">0</span> <span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowUpdateEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">updatedRecord</span><span class="o">,</span> <span class="nx">oldData</span><span class="o">:</span><span class="nx">oldData</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;DataTable row updated: Record ID = &quot;</span> <span class="o">+</span> <span class="nx">updatedRecord</span><span class="o">.</span><span class="nx">getId</span><span class="o">()</span> <span class="o">+</span>
<span class="s2">&quot;, Record index = &quot;</span> <span class="o">+</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">updatedRecord</span><span class="o">)</span> <span class="o">+</span>
<span class="s2">&quot;, page row index = &quot;</span> <span class="o">+</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">updatedRecord</span><span class="o">),</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Deletes the given row&#39;s Record from the RecordSet. If the row is on current page,</span>
<span class="c"> * the corresponding DOM elements are also deleted.</span>
<span class="c"> *</span>
<span class="c"> * @method deleteRow</span>
<span class="c"> * @param row {HTMLElement | String | Number} DOM element reference or ID string</span>
<span class="c"> * to DataTable page element or RecordSet index.</span>
<span class="c"> */</span>
<span class="nx">deleteRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nRecordIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">nRecordIndex</span><span class="o">))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">nRecordIndex</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nTrIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">nRecordIndex</span><span class="o">);</span>
<span class="c">// Remove from selection tracker if there</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">sRecordId</span> <span class="o">=</span> <span class="nx">oRecord</span><span class="o">.</span><span class="nx">getId</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">||</span> <span class="o">[];</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">])</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">]</span> <span class="o">===</span> <span class="nx">sRecordId</span><span class="o">))</span> <span class="o">||</span>
<span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isObject</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">])</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">recordId</span> <span class="o">===</span> <span class="nx">sRecordId</span><span class="o">)))</span> <span class="o">{</span>
<span class="nx">tracker</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">j</span><span class="o">,</span><span class="m">1</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Delete Record from RecordSet</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oData</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">deleteRecord</span><span class="o">(</span><span class="nx">nRecordIndex</span><span class="o">);</span>
<span class="c">// Update the UI</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// If paginated and the deleted row was on this or a prior page, just</span>
<span class="c"></span> <span class="c">// re-render</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oPaginator</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oPaginator</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Update the paginator&#39;s totalRecords</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">totalRecords</span> <span class="o">=</span> <span class="nx">oPaginator</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;totalRecords&#39;</span><span class="o">),</span>
<span class="c">// must capture before the totalRecords change because</span>
<span class="c"></span> <span class="c">// Paginator shifts to previous page automatically</span>
<span class="c"></span> <span class="nx">rng</span> <span class="o">=</span> <span class="nx">oPaginator</span><span class="o">.</span><span class="nx">getPageRecords</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">totalRecords</span> <span class="o">!==</span> <span class="nx">widget</span><span class="o">.</span><span class="nx">Paginator</span><span class="o">.</span><span class="nx">VALUE_UNLIMITED</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oPaginator</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;totalRecords&#39;</span><span class="o">,</span><span class="nx">totalRecords</span> <span class="o">-</span> <span class="m">1</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// The deleted record was on this or a prior page, re-render</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(!</span><span class="nx">rng</span> <span class="o">||</span> <span class="nx">nRecordIndex</span> <span class="o">&lt;=</span> <span class="nx">rng</span><span class="o">[</span><span class="m">1</span><span class="o">])</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">render</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Not paginated</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">nTrIndex</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">isLast</span> <span class="o">=</span> <span class="o">(</span><span class="nx">nTrIndex</span> <span class="o">==</span> <span class="k">this</span><span class="o">.</span><span class="nx">getLastTrEl</span><span class="o">().</span><span class="nx">sectionRowIndex</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_deleteTrEl</span><span class="o">(</span><span class="nx">nTrIndex</span><span class="o">);</span>
<span class="c">// Post-delete tasks</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Set FIRST/LAST</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">nTrIndex</span> <span class="o">===</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setFirstRow</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">isLast</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setLastRow</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">// Set EVEN/ODD</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">nTrIndex</span> <span class="o">!=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">.</span><span class="nx">length</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setRowStripes</span><span class="o">(</span><span class="nx">nTrIndex</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowDeleteEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">recordIndex</span><span class="o">:</span><span class="nx">nRecordIndex</span><span class="o">,</span>
<span class="nx">oldData</span><span class="o">:</span><span class="nx">oData</span><span class="o">,</span> <span class="nx">trElIndex</span><span class="o">:</span><span class="nx">nTrIndex</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Deleted row with data &quot;</span> <span class="o">+</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">lang</span><span class="o">.</span><span class="nx">dump</span><span class="o">(</span><span class="nx">oData</span><span class="o">)</span> <span class="o">+</span>
<span class="s2">&quot; at RecordSet index &quot;</span> <span class="o">+</span> <span class="nx">nRecordIndex</span> <span class="o">+</span> <span class="s2">&quot; and page row index &quot;</span> <span class="o">+</span> <span class="nx">nTrIndex</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;renderLoopSize&quot;</span><span class="o">)</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="m">0</span> <span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not delete row: &quot;</span> <span class="o">+</span> <span class="nx">row</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Convenience method to delete multiple rows.</span>
<span class="c"> *</span>
<span class="c"> * @method deleteRows</span>
<span class="c"> * @param row {HTMLElement | String | Number} DOM element reference or ID string</span>
<span class="c"> * to DataTable page element or RecordSet index.</span>
<span class="c"> * @param count {Number} (optional) How many rows to delete. A negative value</span>
<span class="c"> * will delete towards the beginning.</span>
<span class="c"> */</span>
<span class="nx">deleteRows</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">,</span> <span class="nx">count</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nRecordIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">nRecordIndex</span><span class="o">))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">nRecordIndex</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nTrIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">nRecordIndex</span><span class="o">);</span>
<span class="c">// Remove from selection tracker if there</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">sRecordId</span> <span class="o">=</span> <span class="nx">oRecord</span><span class="o">.</span><span class="nx">getId</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">||</span> <span class="o">[];</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">])</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">]</span> <span class="o">===</span> <span class="nx">sRecordId</span><span class="o">))</span> <span class="o">||</span>
<span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isObject</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">])</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">recordId</span> <span class="o">===</span> <span class="nx">sRecordId</span><span class="o">)))</span> <span class="o">{</span>
<span class="nx">tracker</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">j</span><span class="o">,</span><span class="m">1</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Delete Record from RecordSet</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">highIndex</span> <span class="o">=</span> <span class="nx">nRecordIndex</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">lowIndex</span> <span class="o">=</span> <span class="nx">nRecordIndex</span><span class="o">;</span>
<span class="c">// Validate count and account for negative value</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">count</span> <span class="o">&amp;&amp;</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">count</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">highIndex</span> <span class="o">=</span> <span class="o">(</span><span class="nx">count</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="nx">nRecordIndex</span> <span class="o">+</span> <span class="nx">count</span> <span class="o">-</span><span class="m">1</span> <span class="o">:</span> <span class="nx">nRecordIndex</span><span class="o">;</span>
<span class="nx">lowIndex</span> <span class="o">=</span> <span class="o">(</span><span class="nx">count</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="nx">nRecordIndex</span> <span class="o">:</span> <span class="nx">nRecordIndex</span> <span class="o">+</span> <span class="nx">count</span> <span class="o">+</span> <span class="m">1</span><span class="o">;</span>
<span class="nx">count</span> <span class="o">=</span> <span class="o">(</span><span class="nx">count</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="nx">count</span> <span class="o">:</span> <span class="nx">count</span><span class="o">*-</span><span class="m">1</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">count</span> <span class="o">=</span> <span class="m">1</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">var</span> <span class="nx">aData</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">deleteRecords</span><span class="o">(</span><span class="nx">lowIndex</span><span class="o">,</span> <span class="nx">count</span><span class="o">);</span>
<span class="c">// Update the UI</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">aData</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oPaginator</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">);</span>
<span class="c">// If paginated and the deleted row was on this or a prior page, just</span>
<span class="c"></span> <span class="c">// re-render</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(</span><span class="nx">oPaginator</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Update the paginator&#39;s totalRecords</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">totalRecords</span> <span class="o">=</span> <span class="nx">oPaginator</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;totalRecords&#39;</span><span class="o">),</span>
<span class="c">// must capture before the totalRecords change because</span>
<span class="c"></span> <span class="c">// Paginator shifts to previous page automatically</span>
<span class="c"></span> <span class="nx">rng</span> <span class="o">=</span> <span class="nx">oPaginator</span><span class="o">.</span><span class="nx">getPageRecords</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">totalRecords</span> <span class="o">!==</span> <span class="nx">widget</span><span class="o">.</span><span class="nx">Paginator</span><span class="o">.</span><span class="nx">VALUE_UNLIMITED</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oPaginator</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;totalRecords&#39;</span><span class="o">,</span><span class="nx">totalRecords</span> <span class="o">-</span> <span class="nx">aData</span><span class="o">.</span><span class="nx">length</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// The records were on this or a prior page, re-render</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(!</span><span class="nx">rng</span> <span class="o">||</span> <span class="nx">lowIndex</span> <span class="o">&lt;=</span> <span class="nx">rng</span><span class="o">[</span><span class="m">1</span><span class="o">])</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">render</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Not paginated</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">nTrIndex</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Delete the TR elements starting with highest index</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">loopN</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;renderLoopSize&quot;</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">loopEnd</span> <span class="o">=</span> <span class="nx">lowIndex</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">nRowsNeeded</span> <span class="o">=</span> <span class="nx">count</span><span class="o">;</span> <span class="c">// how many needed</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArg</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRow</span><span class="o">,</span>
<span class="nx">len</span> <span class="o">=</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="o">(</span><span class="nb">Math</span><span class="o">.</span><span class="nx">max</span><span class="o">(</span><span class="nx">i</span> <span class="o">-</span> <span class="nx">loopN</span><span class="o">,</span><span class="nx">loopEnd</span><span class="o">)-</span><span class="m">1</span><span class="o">)</span> <span class="o">:</span> <span class="nx">loopEnd</span><span class="o">-</span><span class="m">1</span><span class="o">;</span>
<span class="k">for</span><span class="o">(;</span> <span class="nx">i</span><span class="o">&gt;</span><span class="nx">len</span><span class="o">;</span> <span class="o">--</span><span class="nx">i</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_deleteTrEl</span><span class="o">(</span><span class="nx">i</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">oArg</span><span class="o">.</span><span class="nx">nCurrentRow</span> <span class="o">=</span> <span class="nx">i</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">iterations</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">ceil</span><span class="o">(</span><span class="nx">count</span><span class="o">/</span><span class="nx">loopN</span><span class="o">)</span> <span class="o">:</span> <span class="m">1</span><span class="o">,</span>
<span class="nx">argument</span><span class="o">:</span> <span class="o">{</span><span class="nx">nCurrentRow</span><span class="o">:</span><span class="nx">highIndex</span><span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">(</span><span class="nx">loopN</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="m">0</span> <span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">// Post-delete tasks</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">rows</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setFirstRow</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setLastRow</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_setRowStripes</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowsDeleteEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">recordIndex</span><span class="o">:</span><span class="nx">count</span><span class="o">,</span>
<span class="nx">oldData</span><span class="o">:</span><span class="nx">aData</span><span class="o">,</span> <span class="nx">count</span><span class="o">:</span><span class="nx">nTrIndex</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;DataTable row deleted: Record ID = &quot;</span> <span class="o">+</span> <span class="nx">sRecordId</span> <span class="o">+</span>
<span class="s2">&quot;, Record index = &quot;</span> <span class="o">+</span> <span class="nx">nRecordIndex</span> <span class="o">+</span>
<span class="s2">&quot;, page row index = &quot;</span> <span class="o">+</span> <span class="nx">nTrIndex</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">-</span><span class="m">1</span> <span class="c">// Needs to run immediately after the DOM deletions above</span>
<span class="c"></span> <span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not delete &quot;</span> <span class="o">+</span> <span class="nx">count</span> <span class="o">+</span> <span class="s2">&quot; rows at row &quot;</span> <span class="o">+</span> <span class="nx">row</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">// CELL FUNCTIONS</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Outputs markup into the given TD based on given Record.</span>
<span class="c"> *</span>
<span class="c"> * @method formatCell</span>
<span class="c"> * @param elCell {HTMLElement} The liner DIV element within the TD.</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} (Optional) Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column} (Optional) Column instance.</span>
<span class="c"> */</span>
<span class="nx">formatCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elCell</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oRecord</span> <span class="o">&amp;&amp;</span> <span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">sField</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">field</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">oData</span> <span class="o">=</span> <span class="nx">oRecord</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="nx">sField</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">fnFormatter</span> <span class="o">=</span> <span class="k">typeof</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">formatter</span> <span class="o">===</span> <span class="s1">&#39;function&#39;</span> <span class="o">?</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">formatter</span> <span class="o">:</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">Formatter</span><span class="o">[</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">formatter</span><span class="o">+</span><span class="s1">&#39;&#39;</span><span class="o">]</span> <span class="o">||</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">Formatter</span><span class="o">.</span><span class="nx">defaultFormatter</span><span class="o">;</span>
<span class="c">// Apply special formatter</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">fnFormatter</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">fnFormatter</span><span class="o">.</span><span class="nx">call</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="nx">elCell</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elCell</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">oData</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;cellFormatEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">column</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">,</span> <span class="nx">key</span><span class="o">:</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span><span class="o">,</span> <span class="nx">el</span><span class="o">:</span><span class="nx">elCell</span><span class="o">});</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not format cell &quot;</span> <span class="o">+</span> <span class="nx">elCell</span><span class="o">,</span> <span class="s2">&quot;error&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * For the given row and column, updates the Record with the given data. If the</span>
<span class="c"> * cell is on current page, the corresponding DOM elements are also updated.</span>
<span class="c"> *</span>
<span class="c"> * @method updateCell</span>
<span class="c"> * @param oRecord {YAHOO.widget.Record} Record instance.</span>
<span class="c"> * @param oColumn {YAHOO.widget.Column | String | Number} A Column key, or a ColumnSet key index.</span>
<span class="c"> * @param oData {Object} Object literal of data for the cell.</span>
<span class="c"> */</span>
<span class="nx">updateCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oData</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Validate Column and Record</span>
<span class="c"></span> <span class="nx">oColumn</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oColumn</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Column</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oColumn</span> <span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span> <span class="o">&amp;&amp;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKey</span><span class="o">()</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oRecord</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Record</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Copy data from the Record for the event that gets fired later</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oldData</span> <span class="o">=</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">DataTable</span><span class="o">.</span><span class="nx">_cloneObject</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">.</span><span class="nx">getData</span><span class="o">());</span>
<span class="c">// Update Record with new data</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">updateRecordValue</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKey</span><span class="o">(),</span> <span class="nx">oData</span><span class="o">);</span>
<span class="c">// Update the TD only if row is on current page</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTd</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">({</span><span class="nx">record</span><span class="o">:</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">column</span><span class="o">:</span> <span class="nx">oColumn</span><span class="o">});</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTd</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">formatCell</span><span class="o">(</span><span class="nx">elTd</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;cellUpdateEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">column</span><span class="o">:</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oldData</span><span class="o">:</span><span class="nx">oldData</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;DataTable cell updated: Record ID = &quot;</span> <span class="o">+</span> <span class="nx">oRecord</span><span class="o">.</span><span class="nx">getId</span><span class="o">()</span> <span class="o">+</span>
<span class="s2">&quot;, Record index = &quot;</span> <span class="o">+</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">+</span>
<span class="s2">&quot;, page row index = &quot;</span> <span class="o">+</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">+</span>
<span class="s2">&quot;, Column key = &quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKey</span><span class="o">(),</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;renderLoopSize&quot;</span><span class="o">)</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">?</span> <span class="m">0</span> <span class="o">:</span> <span class="o">-</span><span class="m">1</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_runRenderChain</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;cellUpdateEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">column</span><span class="o">:</span> <span class="nx">oColumn</span><span class="o">,</span> <span class="nx">oldData</span><span class="o">:</span><span class="nx">oldData</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;DataTable cell updated: Record ID = &quot;</span> <span class="o">+</span> <span class="nx">oRecord</span><span class="o">.</span><span class="nx">getId</span><span class="o">()</span> <span class="o">+</span>
<span class="s2">&quot;, Record index = &quot;</span> <span class="o">+</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">+</span>
<span class="s2">&quot;, page row index = &quot;</span> <span class="o">+</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">+</span>
<span class="s2">&quot;, Column key = &quot;</span> <span class="o">+</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">getKey</span><span class="o">(),</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">// PAGINATION</span>
<span class="c">/**</span>
<span class="c"> * Method executed during set() operation for the &quot;paginator&quot; attribute.</span>
<span class="c"> * Adds and/or severs event listeners between DataTable and Paginator</span>
<span class="c"> *</span>
<span class="c"> * @method _updatePaginator</span>
<span class="c"> * @param newPag {Paginator} Paginator instance (or null) for DataTable to use</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_updatePaginator</span> <span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">newPag</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oldPag</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oldPag</span> <span class="o">&amp;&amp;</span> <span class="nx">newPag</span> <span class="o">!==</span> <span class="nx">oldPag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oldPag</span><span class="o">.</span><span class="nx">unsubscribe</span><span class="o">(</span><span class="s1">&#39;changeRequest&#39;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">onPaginatorChangeRequest</span><span class="o">,</span> <span class="k">this</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">newPag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">newPag</span><span class="o">.</span><span class="nx">subscribe</span><span class="o">(</span><span class="s1">&#39;changeRequest&#39;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">onPaginatorChangeRequest</span><span class="o">,</span> <span class="k">this</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Update the UI infrastructure in response to a &quot;paginator&quot; attribute change.</span>
<span class="c"> *</span>
<span class="c"> * @method _handlePaginatorChange</span>
<span class="c"> * @param e {Object} Change event object containing keys &#39;type&#39;,&#39;newValue&#39;,</span>
<span class="c"> * and &#39;prevValue&#39;</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_handlePaginatorChange</span> <span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">e</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">e</span><span class="o">.</span><span class="nx">prevValue</span> <span class="o">===</span> <span class="nx">e</span><span class="o">.</span><span class="nx">newValue</span><span class="o">)</span> <span class="o">{</span> <span class="k">return</span><span class="o">;</span> <span class="o">}</span>
<span class="k">var</span> <span class="nx">newPag</span> <span class="o">=</span> <span class="nx">e</span><span class="o">.</span><span class="nx">newValue</span><span class="o">,</span>
<span class="nx">oldPag</span> <span class="o">=</span> <span class="nx">e</span><span class="o">.</span><span class="nx">prevValue</span><span class="o">,</span>
<span class="nx">containers</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_defaultPaginatorContainers</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oldPag</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oldPag</span><span class="o">.</span><span class="nx">getContainerNodes</span><span class="o">()[</span><span class="m">0</span><span class="o">]</span> <span class="o">==</span> <span class="nx">containers</span><span class="o">[</span><span class="m">0</span><span class="o">])</span> <span class="o">{</span>
<span class="nx">oldPag</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;containers&#39;</span><span class="o">,[]);</span>
<span class="o">}</span>
<span class="nx">oldPag</span><span class="o">.</span><span class="nx">destroy</span><span class="o">();</span>
<span class="c">// Convenience: share the default containers if possible.</span>
<span class="c"></span> <span class="c">// Otherwise, remove the default containers from the DOM.</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(</span><span class="nx">containers</span><span class="o">[</span><span class="m">0</span><span class="o">])</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">newPag</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">newPag</span><span class="o">.</span><span class="nx">getContainerNodes</span><span class="o">().</span><span class="nx">length</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">newPag</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;containers&#39;</span><span class="o">,</span><span class="nx">containers</span><span class="o">);</span>
<span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// No new Paginator to use existing containers, OR new</span>
<span class="c"></span> <span class="c">// Paginator has configured containers.</span>
<span class="c"></span> <span class="k">for</span> <span class="o">(</span><span class="k">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="nx">containers</span><span class="o">.</span><span class="nx">length</span> <span class="o">-</span> <span class="m">1</span><span class="o">;</span> <span class="nx">i</span> <span class="o">&gt;=</span> <span class="m">0</span><span class="o">;</span> <span class="o">--</span><span class="nx">i</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">containers</span><span class="o">[</span><span class="nx">i</span><span class="o">])</span> <span class="o">{</span>
<span class="nx">containers</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">parentNode</span><span class="o">.</span><span class="nx">removeChild</span><span class="o">(</span><span class="nx">containers</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(!</span><span class="k">this</span><span class="o">.</span><span class="nx">_bInit</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">render</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">newPag</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">renderPaginator</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns the default containers used for Paginators. If create param is</span>
<span class="c"> * passed, the containers will be created and added to the DataTable container.</span>
<span class="c"> *</span>
<span class="c"> * @method _defaultPaginatorContainers</span>
<span class="c"> * @param create {boolean} Create the default containers if not found</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_defaultPaginatorContainers</span> <span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">create</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">above_id</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span> <span class="o">+</span> <span class="s1">&#39;-paginator0&#39;</span><span class="o">,</span>
<span class="nx">below_id</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span> <span class="o">+</span> <span class="s1">&#39;-paginator1&#39;</span><span class="o">,</span>
<span class="nx">above</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">above_id</span><span class="o">),</span>
<span class="nx">below</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">below_id</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">create</span> <span class="o">&amp;&amp;</span> <span class="o">(!</span><span class="nx">above</span> <span class="o">||</span> <span class="o">!</span><span class="nx">below</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// One above and one below the table</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(!</span><span class="nx">above</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">above</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s1">&#39;div&#39;</span><span class="o">);</span>
<span class="nx">above</span><span class="o">.</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">above_id</span><span class="o">;</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">above</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_PAGINATOR</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nx">above</span><span class="o">,</span><span class="k">this</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(!</span><span class="nx">below</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">below</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s1">&#39;div&#39;</span><span class="o">);</span>
<span class="nx">below</span><span class="o">.</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">below_id</span><span class="o">;</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">below</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_PAGINATOR</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elContainer</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nx">below</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">return</span> <span class="o">[</span><span class="nx">above</span><span class="o">,</span><span class="nx">below</span><span class="o">];</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Renders the Paginator to the DataTable UI</span>
<span class="c"> *</span>
<span class="c"> * @method renderPaginator</span>
<span class="c"> */</span>
<span class="nx">renderPaginator</span> <span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">pag</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;paginator&quot;</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(!</span><span class="nx">pag</span><span class="o">)</span> <span class="o">{</span> <span class="k">return</span><span class="o">;</span> <span class="o">}</span>
<span class="c">// Add the containers if the Paginator is not configured with containers</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(!</span><span class="nx">pag</span><span class="o">.</span><span class="nx">getContainerNodes</span><span class="o">().</span><span class="nx">length</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">pag</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;containers&#39;</span><span class="o">,</span><span class="k">this</span><span class="o">.</span><span class="nx">_defaultPaginatorContainers</span><span class="o">(</span><span class="kc">true</span><span class="o">));</span>
<span class="o">}</span>
<span class="nx">pag</span><span class="o">.</span><span class="nx">render</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable method gives implementers a hook to show loading message before</span>
<span class="c"> * changing Paginator value.</span>
<span class="c"> *</span>
<span class="c"> * @method doBeforePaginatorChange</span>
<span class="c"> * @param oPaginatorState {Object} An object literal describing the proposed pagination state.</span>
<span class="c"> * @return {Boolean} Return true to continue changing Paginator value.</span>
<span class="c"> */</span>
<span class="nx">doBeforePaginatorChange</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oPaginatorState</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">showTableMessage</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;MSG_LOADING&quot;</span><span class="o">),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_LOADING</span><span class="o">);</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Responds to new Pagination states. By default, updates the UI to reflect the</span>
<span class="c"> * new state. If &quot;dynamicData&quot; is true, current selections are purged before</span>
<span class="c"> * a request is sent to the DataSource for data for the new state (using the</span>
<span class="c"> * request returned by &quot;generateRequest()&quot;).</span>
<span class="c"> * </span>
<span class="c"> * @method onPaginatorChangeRequest</span>
<span class="c"> * @param oPaginatorState {Object} An object literal describing the proposed pagination state.</span>
<span class="c"> */</span>
<span class="nx">onPaginatorChangeRequest</span> <span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">oPaginatorState</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">ok</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforePaginatorChange</span><span class="o">(</span><span class="nx">oPaginatorState</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">ok</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Server-side pagination</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;dynamicData&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Get the current state</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oState</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getState</span><span class="o">();</span>
<span class="c">// Update pagination values</span>
<span class="c"></span> <span class="nx">oState</span><span class="o">.</span><span class="nx">pagination</span> <span class="o">=</span> <span class="nx">oPaginatorState</span><span class="o">;</span>
<span class="c">// Get the request for the new state</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">request</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;generateRequest&quot;</span><span class="o">)(</span><span class="nx">oState</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="c">// Purge selections</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">unselectAllRows</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectAllCells</span><span class="o">();</span>
<span class="c">// Get the new data from the server</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">callback</span> <span class="o">=</span> <span class="o">{</span>
<span class="nx">success</span> <span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">onDataReturnSetRows</span><span class="o">,</span>
<span class="nx">failure</span> <span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">onDataReturnSetRows</span><span class="o">,</span>
<span class="nx">argument</span> <span class="o">:</span> <span class="nx">oState</span><span class="o">,</span> <span class="c">// Pass along the new state to the callback</span>
<span class="c"></span> <span class="nx">scope</span> <span class="o">:</span> <span class="k">this</span>
<span class="o">};</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oDataSource</span><span class="o">.</span><span class="nx">sendRequest</span><span class="o">(</span><span class="nx">request</span><span class="o">,</span> <span class="nx">callback</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Client-side pagination</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Set the core pagination values silently (the second param)</span>
<span class="c"></span> <span class="c">// to avoid looping back through the changeRequest mechanism</span>
<span class="c"></span> <span class="nx">oPaginatorState</span><span class="o">.</span><span class="nx">paginator</span><span class="o">.</span><span class="nx">setStartIndex</span><span class="o">(</span><span class="nx">oPaginatorState</span><span class="o">.</span><span class="nx">recordOffset</span><span class="o">,</span><span class="kc">true</span><span class="o">);</span>
<span class="nx">oPaginatorState</span><span class="o">.</span><span class="nx">paginator</span><span class="o">.</span><span class="nx">setRowsPerPage</span><span class="o">(</span><span class="nx">oPaginatorState</span><span class="o">.</span><span class="nx">rowsPerPage</span><span class="o">,</span><span class="kc">true</span><span class="o">);</span>
<span class="c">// Update the UI</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">render</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not change Paginator value \&quot;&quot;</span> <span class="o">+</span> <span class="nx">oPaginatorState</span> <span class="o">+</span> <span class="s2">&quot;\&quot;&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">// SELECTION/HIGHLIGHTING</span>
<span class="c"></span>
<span class="c">/*</span>
<span class="c"> * Reference to last highlighted cell element</span>
<span class="c"> *</span>
<span class="c"> * @property _elLastHighlightedTd</span>
<span class="c"> * @type HTMLElement</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_elLastHighlightedTd</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/*</span>
<span class="c"> * ID string of last highlighted row element</span>
<span class="c"> *</span>
<span class="c"> * @property _sLastHighlightedTrElId</span>
<span class="c"> * @type String</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="c">//_sLastHighlightedTrElId : null,</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Array to track row selections (by sRecordId) and/or cell selections</span>
<span class="c"> * (by {recordId:sRecordId, columnKey:sColumnKey})</span>
<span class="c"> *</span>
<span class="c"> * @property _aSelections</span>
<span class="c"> * @type Object[]</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_aSelections</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Record instance of the row selection anchor.</span>
<span class="c"> *</span>
<span class="c"> * @property _oAnchorRecord</span>
<span class="c"> * @type YAHOO.widget.Record</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_oAnchorRecord</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Object literal representing cell selection anchor:</span>
<span class="c"> * {recordId:sRecordId, columnKey:sColumnKey}.</span>
<span class="c"> *</span>
<span class="c"> * @property _oAnchorCell</span>
<span class="c"> * @type Object</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_oAnchorCell</span> <span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/**</span>
<span class="c"> * Convenience method to remove the class YAHOO.widget.DataTable.CLASS_SELECTED</span>
<span class="c"> * from all TR elements on the page.</span>
<span class="c"> *</span>
<span class="c"> * @method _unselectAllTrEls</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_unselectAllTrEls</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">selectedRows</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">getElementsByClassName</span><span class="o">(</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">,</span><span class="s2">&quot;tr&quot;</span><span class="o">,</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">);</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">selectedRows</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns object literal of values that represent the selection trigger. Used</span>
<span class="c"> * to determine selection behavior resulting from a key event.</span>
<span class="c"> *</span>
<span class="c"> * @method _getSelectionTrigger</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_getSelectionTrigger</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">sMode</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;selectionMode&quot;</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">oTrigger</span> <span class="o">=</span> <span class="o">{};</span>
<span class="k">var</span> <span class="nx">oTriggerCell</span><span class="o">,</span> <span class="nx">oTriggerRecord</span><span class="o">,</span> <span class="nx">nTriggerRecordIndex</span><span class="o">,</span> <span class="nx">elTriggerRow</span><span class="o">,</span> <span class="nx">nTriggerTrIndex</span><span class="o">;</span>
<span class="c">// Cell mode</span>
<span class="c"></span> <span class="k">if</span><span class="o">((</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;cellblock&quot;</span><span class="o">)</span> <span class="o">||</span> <span class="o">(</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;cellrange&quot;</span><span class="o">)</span> <span class="o">||</span> <span class="o">(</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;singlecell&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oTriggerCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getLastSelectedCell</span><span class="o">();</span>
<span class="c">// No selected cells found</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">oTriggerCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">oTriggerRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">oTriggerCell</span><span class="o">.</span><span class="nx">recordId</span><span class="o">);</span>
<span class="nx">nTriggerRecordIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">oTriggerRecord</span><span class="o">);</span>
<span class="nx">elTriggerRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">oTriggerRecord</span><span class="o">);</span>
<span class="nx">nTriggerTrIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">elTriggerRow</span><span class="o">);</span>
<span class="c">// Selected cell not found on this page</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">nTriggerTrIndex</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">oTrigger</span><span class="o">.</span><span class="nx">record</span> <span class="o">=</span> <span class="nx">oTriggerRecord</span><span class="o">;</span>
<span class="nx">oTrigger</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">=</span> <span class="nx">nTriggerRecordIndex</span><span class="o">;</span>
<span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">oTriggerCell</span><span class="o">);</span>
<span class="nx">oTrigger</span><span class="o">.</span><span class="nx">trIndex</span> <span class="o">=</span> <span class="nx">nTriggerTrIndex</span><span class="o">;</span>
<span class="nx">oTrigger</span><span class="o">.</span><span class="nx">column</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">oTriggerCell</span><span class="o">.</span><span class="nx">columnKey</span><span class="o">);</span>
<span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">column</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="nx">oTrigger</span><span class="o">.</span><span class="nx">cell</span> <span class="o">=</span> <span class="nx">oTriggerCell</span><span class="o">;</span>
<span class="k">return</span> <span class="nx">oTrigger</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Row mode</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">oTriggerRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getLastSelectedRecord</span><span class="o">();</span>
<span class="c">// No selected rows found</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">oTriggerRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="c">// Selected row found, but is it on current page?</span>
<span class="c"></span> <span class="nx">oTriggerRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">oTriggerRecord</span><span class="o">);</span>
<span class="nx">nTriggerRecordIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">oTriggerRecord</span><span class="o">);</span>
<span class="nx">elTriggerRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">oTriggerRecord</span><span class="o">);</span>
<span class="nx">nTriggerTrIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">elTriggerRow</span><span class="o">);</span>
<span class="c">// Selected row not found on this page</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">nTriggerTrIndex</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">oTrigger</span><span class="o">.</span><span class="nx">record</span> <span class="o">=</span> <span class="nx">oTriggerRecord</span><span class="o">;</span>
<span class="nx">oTrigger</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">=</span> <span class="nx">nTriggerRecordIndex</span><span class="o">;</span>
<span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span> <span class="o">=</span> <span class="nx">elTriggerRow</span><span class="o">;</span>
<span class="nx">oTrigger</span><span class="o">.</span><span class="nx">trIndex</span> <span class="o">=</span> <span class="nx">nTriggerTrIndex</span><span class="o">;</span>
<span class="k">return</span> <span class="nx">oTrigger</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns object literal of values that represent the selection anchor. Used</span>
<span class="c"> * to determine selection behavior resulting from a user event.</span>
<span class="c"> *</span>
<span class="c"> * @method _getSelectionAnchor</span>
<span class="c"> * @param oTrigger {Object} (Optional) Object literal of selection trigger values</span>
<span class="c"> * (for key events).</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_getSelectionAnchor</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">sMode</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;selectionMode&quot;</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">oAnchor</span> <span class="o">=</span> <span class="o">{};</span>
<span class="k">var</span> <span class="nx">oAnchorRecord</span><span class="o">,</span> <span class="nx">nAnchorRecordIndex</span><span class="o">,</span> <span class="nx">nAnchorTrIndex</span><span class="o">;</span>
<span class="c">// Cell mode</span>
<span class="c"></span> <span class="k">if</span><span class="o">((</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;cellblock&quot;</span><span class="o">)</span> <span class="o">||</span> <span class="o">(</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;cellrange&quot;</span><span class="o">)</span> <span class="o">||</span> <span class="o">(</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;singlecell&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Validate anchor cell</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oAnchorCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span><span class="o">;</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">oAnchorCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oAnchorCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span> <span class="o">=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">cell</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oAnchorRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span><span class="o">.</span><span class="nx">record</span><span class="o">;</span>
<span class="nx">nAnchorRecordIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">oAnchorRecord</span><span class="o">);</span>
<span class="nx">nAnchorTrIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">oAnchorRecord</span><span class="o">);</span>
<span class="c">// If anchor cell is not on this page...</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">nAnchorTrIndex</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// ...set TR index equal to top TR</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">nAnchorRecordIndex</span> <span class="o">&lt;</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">getFirstTrEl</span><span class="o">()))</span> <span class="o">{</span>
<span class="nx">nAnchorTrIndex</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// ...set TR index equal to bottom TR</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">nAnchorTrIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">getLastTrEl</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oAnchor</span><span class="o">.</span><span class="nx">record</span> <span class="o">=</span> <span class="nx">oAnchorRecord</span><span class="o">;</span>
<span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">=</span> <span class="nx">nAnchorRecordIndex</span><span class="o">;</span>
<span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span> <span class="o">=</span> <span class="nx">nAnchorTrIndex</span><span class="o">;</span>
<span class="nx">oAnchor</span><span class="o">.</span><span class="nx">column</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span><span class="o">.</span><span class="nx">column</span><span class="o">;</span>
<span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">=</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">column</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="nx">oAnchor</span><span class="o">.</span><span class="nx">cell</span> <span class="o">=</span> <span class="nx">oAnchorCell</span><span class="o">;</span>
<span class="k">return</span> <span class="nx">oAnchor</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Row mode</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">oAnchorRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorRecord</span><span class="o">;</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">oAnchorRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oAnchorRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorRecord</span> <span class="o">=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">record</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">nAnchorRecordIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">oAnchorRecord</span><span class="o">);</span>
<span class="nx">nAnchorTrIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">oAnchorRecord</span><span class="o">);</span>
<span class="c">// If anchor row is not on this page...</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">nAnchorTrIndex</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// ...set TR index equal to top TR</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">nAnchorRecordIndex</span> <span class="o">&lt;</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">getFirstTrEl</span><span class="o">()))</span> <span class="o">{</span>
<span class="nx">nAnchorTrIndex</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// ...set TR index equal to bottom TR</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">nAnchorTrIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">getLastTrEl</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">oAnchor</span><span class="o">.</span><span class="nx">record</span> <span class="o">=</span> <span class="nx">oAnchorRecord</span><span class="o">;</span>
<span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">=</span> <span class="nx">nAnchorRecordIndex</span><span class="o">;</span>
<span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span> <span class="o">=</span> <span class="nx">nAnchorTrIndex</span><span class="o">;</span>
<span class="k">return</span> <span class="nx">oAnchor</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Determines selection behavior resulting from a mouse event when selection mode</span>
<span class="c"> * is set to &quot;standard&quot;.</span>
<span class="c"> *</span>
<span class="c"> * @method _handleStandardSelectionByMouse</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_handleStandardSelectionByMouse</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">;</span>
<span class="c">// Validate target row</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTargetRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">e</span> <span class="o">=</span> <span class="nx">oArgs</span><span class="o">.</span><span class="nx">event</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">bSHIFT</span> <span class="o">=</span> <span class="nx">e</span><span class="o">.</span><span class="nx">shiftKey</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">bCTRL</span> <span class="o">=</span> <span class="nx">e</span><span class="o">.</span><span class="nx">ctrlKey</span> <span class="o">||</span> <span class="o">((</span><span class="nx">navigator</span><span class="o">.</span><span class="nx">userAgent</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">().</span><span class="nx">indexOf</span><span class="o">(</span><span class="s2">&quot;mac&quot;</span><span class="o">)</span> <span class="o">!=</span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="nx">e</span><span class="o">.</span><span class="nx">metaKey</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">oTargetRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">nTargetRecordIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">oTargetRecord</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">oAnchor</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getSelectionAnchor</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">i</span><span class="o">;</span>
<span class="c">// Both SHIFT and CTRL</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">bSHIFT</span> <span class="o">&amp;&amp;</span> <span class="nx">bCTRL</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Validate anchor</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">isSelected</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">record</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Select all rows between anchor row and target row, including target row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">+</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">nTargetRecordIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(!</span><span class="k">this</span><span class="o">.</span><span class="nx">isSelected</span><span class="o">(</span><span class="nx">i</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectRow</span><span class="o">(</span><span class="nx">i</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select all rows between target row and anchor row, including target row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;=</span><span class="nx">nTargetRecordIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(!</span><span class="k">this</span><span class="o">.</span><span class="nx">isSelected</span><span class="o">(</span><span class="nx">i</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectRow</span><span class="o">(</span><span class="nx">i</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="c">// Unselect all rows between anchor row and target row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">+</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">nTargetRecordIndex</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">isSelected</span><span class="o">(</span><span class="nx">i</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectRow</span><span class="o">(</span><span class="nx">i</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselect all rows between target row and anchor row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">nTargetRecordIndex</span><span class="o">+</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">isSelected</span><span class="o">(</span><span class="nx">i</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectRow</span><span class="o">(</span><span class="nx">i</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select the target row</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">selectRow</span><span class="o">(</span><span class="nx">oTargetRecord</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Invalid anchor</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Set anchor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorRecord</span> <span class="o">=</span> <span class="nx">oTargetRecord</span><span class="o">;</span>
<span class="c">// Toggle selection of target</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">isSelected</span><span class="o">(</span><span class="nx">oTargetRecord</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectRow</span><span class="o">(</span><span class="nx">oTargetRecord</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectRow</span><span class="o">(</span><span class="nx">oTargetRecord</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Only SHIFT</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">bSHIFT</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectAllRows</span><span class="o">();</span>
<span class="c">// Validate anchor</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select all rows between anchor row and target row,</span>
<span class="c"></span> <span class="c">// including the anchor row and target row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">nTargetRecordIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectRow</span><span class="o">(</span><span class="nx">i</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select all rows between target row and anchor row,</span>
<span class="c"></span> <span class="c">// including the target row and anchor row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;=</span><span class="nx">nTargetRecordIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectRow</span><span class="o">(</span><span class="nx">i</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Invalid anchor</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Set anchor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorRecord</span> <span class="o">=</span> <span class="nx">oTargetRecord</span><span class="o">;</span>
<span class="c">// Select target row only</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">selectRow</span><span class="o">(</span><span class="nx">oTargetRecord</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Only CTRL</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">bCTRL</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Set anchor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorRecord</span> <span class="o">=</span> <span class="nx">oTargetRecord</span><span class="o">;</span>
<span class="c">// Toggle selection of target</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">isSelected</span><span class="o">(</span><span class="nx">oTargetRecord</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectRow</span><span class="o">(</span><span class="nx">oTargetRecord</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectRow</span><span class="o">(</span><span class="nx">oTargetRecord</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Neither SHIFT nor CTRL</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_handleSingleSelectionByMouse</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">);</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Determines selection behavior resulting from a key event when selection mode</span>
<span class="c"> * is set to &quot;standard&quot;.</span>
<span class="c"> *</span>
<span class="c"> * @method _handleStandardSelectionByKey</span>
<span class="c"> * @param e {HTMLEvent} Event object.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_handleStandardSelectionByKey</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nKey</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getCharCode</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">if</span><span class="o">((</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">38</span><span class="o">)</span> <span class="o">||</span> <span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">40</span><span class="o">))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">bSHIFT</span> <span class="o">=</span> <span class="nx">e</span><span class="o">.</span><span class="nx">shiftKey</span><span class="o">;</span>
<span class="c">// Validate trigger</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oTrigger</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getSelectionTrigger</span><span class="o">();</span>
<span class="c">// Arrow selection only works if last selected row is on current page</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">oTrigger</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">stopEvent</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="c">// Validate anchor</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oAnchor</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getSelectionAnchor</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">);</span>
<span class="c">// Determine which direction we&#39;re going to</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">bSHIFT</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Selecting down away from anchor row</span>
<span class="c"></span> <span class="k">if</span><span class="o">((</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">40</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectRow</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">getNextTrEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">));</span>
<span class="o">}</span>
<span class="c">// Selecting up away from anchor row</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">((</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">38</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&gt;=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectRow</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">getPreviousTrEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">));</span>
<span class="o">}</span>
<span class="c">// Unselect trigger</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectRow</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_handleSingleSelectionByKey</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Determines selection behavior resulting from a mouse event when selection mode</span>
<span class="c"> * is set to &quot;single&quot;.</span>
<span class="c"> *</span>
<span class="c"> * @method _handleSingleSelectionByMouse</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_handleSingleSelectionByMouse</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">;</span>
<span class="c">// Validate target row</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTargetRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oTargetRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">);</span>
<span class="c">// Set anchor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorRecord</span> <span class="o">=</span> <span class="nx">oTargetRecord</span><span class="o">;</span>
<span class="c">// Select only target</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">unselectAllRows</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectRow</span><span class="o">(</span><span class="nx">oTargetRecord</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Determines selection behavior resulting from a key event when selection mode</span>
<span class="c"> * is set to &quot;single&quot;.</span>
<span class="c"> *</span>
<span class="c"> * @method _handleSingleSelectionByKey</span>
<span class="c"> * @param e {HTMLEvent} Event object.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_handleSingleSelectionByKey</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nKey</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getCharCode</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">if</span><span class="o">((</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">38</span><span class="o">)</span> <span class="o">||</span> <span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">40</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Validate trigger</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oTrigger</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getSelectionTrigger</span><span class="o">();</span>
<span class="c">// Arrow selection only works if last selected row is on current page</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">oTrigger</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">stopEvent</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="c">// Determine the new row to select</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elNew</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">38</span><span class="o">)</span> <span class="o">{</span> <span class="c">// arrow up</span>
<span class="c"></span> <span class="nx">elNew</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getPreviousTrEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">);</span>
<span class="c">// Validate new row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elNew</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: wrap around to last tr on current page</span>
<span class="c"></span> <span class="c">//elNew = this.getLastTrEl();</span>
<span class="c"></span>
<span class="c">//TODO: wrap back to last tr of previous page</span>
<span class="c"></span>
<span class="c">// Top row selection is sticky</span>
<span class="c"></span> <span class="nx">elNew</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getFirstTrEl</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">40</span><span class="o">)</span> <span class="o">{</span> <span class="c">// arrow down</span>
<span class="c"></span> <span class="nx">elNew</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getNextTrEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">);</span>
<span class="c">// Validate new row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elNew</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: wrap around to first tr on current page</span>
<span class="c"></span> <span class="c">//elNew = this.getFirstTrEl();</span>
<span class="c"></span>
<span class="c">//TODO: wrap forward to first tr of previous page</span>
<span class="c"></span>
<span class="c">// Bottom row selection is sticky</span>
<span class="c"></span> <span class="nx">elNew</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getLastTrEl</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselect all rows</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">unselectAllRows</span><span class="o">();</span>
<span class="c">// Select the new row</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">selectRow</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="c">// Set new anchor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Determines selection behavior resulting from a mouse event when selection mode</span>
<span class="c"> * is set to &quot;cellblock&quot;.</span>
<span class="c"> *</span>
<span class="c"> * @method _handleCellBlockSelectionByMouse</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_handleCellBlockSelectionByMouse</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">;</span>
<span class="c">// Validate target cell</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTargetCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTargetCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">e</span> <span class="o">=</span> <span class="nx">oArgs</span><span class="o">.</span><span class="nx">event</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">bSHIFT</span> <span class="o">=</span> <span class="nx">e</span><span class="o">.</span><span class="nx">shiftKey</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">bCTRL</span> <span class="o">=</span> <span class="nx">e</span><span class="o">.</span><span class="nx">ctrlKey</span> <span class="o">||</span> <span class="o">((</span><span class="nx">navigator</span><span class="o">.</span><span class="nx">userAgent</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">().</span><span class="nx">indexOf</span><span class="o">(</span><span class="s2">&quot;mac&quot;</span><span class="o">)</span> <span class="o">!=</span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="nx">e</span><span class="o">.</span><span class="nx">metaKey</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elTargetRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">elTargetCell</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">nTargetTrIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">oTargetColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elTargetCell</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">nTargetColKeyIndex</span> <span class="o">=</span> <span class="nx">oTargetColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">oTargetRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">nTargetRecordIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">oTargetRecord</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">oTargetCell</span> <span class="o">=</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oTargetRecord</span><span class="o">,</span> <span class="nx">column</span><span class="o">:</span><span class="nx">oTargetColumn</span><span class="o">};</span>
<span class="k">var</span> <span class="nx">oAnchor</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getSelectionAnchor</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTbodyEl</span><span class="o">().</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">startIndex</span><span class="o">,</span> <span class="nx">endIndex</span><span class="o">,</span> <span class="nx">currentRow</span><span class="o">,</span> <span class="nx">i</span><span class="o">,</span> <span class="nx">j</span><span class="o">;</span>
<span class="c">// Both SHIFT and CTRL</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">bSHIFT</span> <span class="o">&amp;&amp;</span> <span class="nx">bCTRL</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Validate anchor</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Anchor is selected</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">isSelected</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">cell</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// All cells are on the same row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">===</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select all cells between anchor cell and target cell, including target cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetColKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">+</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">nTargetColKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select all cells between target cell and anchor cell, including target cell</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nTargetColKeyIndex</span> <span class="o">&lt;</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">nTargetColKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor row is above target row</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">startIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">min</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">,</span> <span class="nx">nTargetColKeyIndex</span><span class="o">);</span>
<span class="nx">endIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">max</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">,</span> <span class="nx">nTargetColKeyIndex</span><span class="o">);</span>
<span class="c">// Select all cells from startIndex to endIndex on rows between anchor row and target row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">nTargetTrIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor row is below target row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">startIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">min</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">,</span> <span class="nx">nTargetColKeyIndex</span><span class="o">);</span>
<span class="nx">endIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">max</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">,</span> <span class="nx">nTargetColKeyIndex</span><span class="o">);</span>
<span class="c">// Select all cells from startIndex to endIndex on rows between target row and anchor row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;=</span><span class="nx">nTargetTrIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor cell is unselected</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// All cells are on the same row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">===</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Unselect all cells between anchor cell and target cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetColKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">+</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">nTargetColKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select all cells between target cell and anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nTargetColKeyIndex</span> <span class="o">&lt;</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">nTargetColKeyIndex</span><span class="o">+</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor row is above target row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Unselect all cells from anchor cell to target cell</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">nTargetTrIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">currentRow</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="c">// This is the anchor row, only unselect cells after the anchor cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span> <span class="o">===</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">j</span><span class="o">&gt;</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// This is the target row, only unelect cells before the target cell</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span> <span class="o">===</span> <span class="nx">nTargetTrIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">j</span><span class="o">&lt;</span><span class="nx">nTargetColKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselect all cells on this row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor row is below target row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Unselect all cells from target cell to anchor cell</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">nTargetTrIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">currentRow</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="c">// This is the target row, only unselect cells after the target cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span> <span class="o">==</span> <span class="nx">nTargetTrIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">j</span><span class="o">&gt;</span><span class="nx">nTargetColKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// This is the anchor row, only unselect cells before the anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span> <span class="o">==</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">j</span><span class="o">&lt;</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselect all cells on this row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select the target cell</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Invalid anchor</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Set anchor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span> <span class="o">=</span> <span class="nx">oTargetCell</span><span class="o">;</span>
<span class="c">// Toggle selection of target</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">isSelected</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Only SHIFT</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">bSHIFT</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectAllCells</span><span class="o">();</span>
<span class="c">// Validate anchor</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// All cells are on the same row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">===</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select all cells between anchor cell and target cell,</span>
<span class="c"></span> <span class="c">// including the anchor cell and target cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetColKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">nTargetColKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select all cells between target cell and anchor cell</span>
<span class="c"></span> <span class="c">// including the target cell and anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nTargetColKeyIndex</span> <span class="o">&lt;</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">nTargetColKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor row is above target row</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select the cellblock from anchor cell to target cell</span>
<span class="c"></span> <span class="c">// including the anchor cell and the target cell</span>
<span class="c"></span> <span class="nx">startIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">min</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">,</span> <span class="nx">nTargetColKeyIndex</span><span class="o">);</span>
<span class="nx">endIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">max</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">,</span> <span class="nx">nTargetColKeyIndex</span><span class="o">);</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">nTargetTrIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor row is below target row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Select the cellblock from target cell to anchor cell</span>
<span class="c"></span> <span class="c">// including the target cell and the anchor cell</span>
<span class="c"></span> <span class="nx">startIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">min</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">,</span> <span class="nx">nTargetColKeyIndex</span><span class="o">);</span>
<span class="nx">endIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">max</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">,</span> <span class="nx">nTargetColKeyIndex</span><span class="o">);</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">nTargetTrIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Invalid anchor</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Set anchor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span> <span class="o">=</span> <span class="nx">oTargetCell</span><span class="o">;</span>
<span class="c">// Select target only</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Only CTRL</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">bCTRL</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Set anchor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span> <span class="o">=</span> <span class="nx">oTargetCell</span><span class="o">;</span>
<span class="c">// Toggle selection of target</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">isSelected</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Neither SHIFT nor CTRL</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_handleSingleCellSelectionByMouse</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Determines selection behavior resulting from a key event when selection mode</span>
<span class="c"> * is set to &quot;cellblock&quot;.</span>
<span class="c"> *</span>
<span class="c"> * @method _handleCellBlockSelectionByKey</span>
<span class="c"> * @param e {HTMLEvent} Event object.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_handleCellBlockSelectionByKey</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nKey</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getCharCode</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">bSHIFT</span> <span class="o">=</span> <span class="nx">e</span><span class="o">.</span><span class="nx">shiftKey</span><span class="o">;</span>
<span class="k">if</span><span class="o">((</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">9</span><span class="o">)</span> <span class="o">||</span> <span class="o">!</span><span class="nx">bSHIFT</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_handleSingleCellSelectionByKey</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">((</span><span class="nx">nKey</span> <span class="o">&gt;</span> <span class="m">36</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">nKey</span> <span class="o">&lt;</span> <span class="m">41</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Validate trigger</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oTrigger</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getSelectionTrigger</span><span class="o">();</span>
<span class="c">// Arrow selection only works if last selected row is on current page</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">oTrigger</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">stopEvent</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="c">// Validate anchor</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oAnchor</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getSelectionAnchor</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">i</span><span class="o">,</span> <span class="nx">startIndex</span><span class="o">,</span> <span class="nx">endIndex</span><span class="o">,</span> <span class="nx">elNew</span><span class="o">,</span> <span class="nx">elNewRow</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTbodyEl</span><span class="o">().</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elThisRow</span> <span class="o">=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="c">// Determine which direction we&#39;re going to</span>
<span class="c"></span>
<span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">40</span><span class="o">)</span> <span class="o">{</span> <span class="c">// arrow down</span>
<span class="c"></span> <span class="c">// Selecting away from anchor cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select the horiz block on the next row...</span>
<span class="c"></span> <span class="c">// ...making sure there is room below the trigger row</span>
<span class="c"></span> <span class="nx">elNewRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getNextTrEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elNewRow</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">startIndex</span> <span class="o">=</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span>
<span class="nx">endIndex</span> <span class="o">=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span>
<span class="c">// ...going left</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">startIndex</span> <span class="o">&gt;</span> <span class="nx">endIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// ... going right</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselecting towards anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">startIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">min</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">,</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">);</span>
<span class="nx">endIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">max</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">,</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">);</span>
<span class="c">// Unselect the horiz block on this row towards the next row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Arrow up</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">38</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Selecting away from anchor cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&gt;=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select the horiz block on the previous row...</span>
<span class="c"></span> <span class="c">// ...making sure there is room</span>
<span class="c"></span> <span class="nx">elNewRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getPreviousTrEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elNewRow</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select in order from anchor to trigger...</span>
<span class="c"></span> <span class="nx">startIndex</span> <span class="o">=</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span>
<span class="nx">endIndex</span> <span class="o">=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span>
<span class="c">// ...going left</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">startIndex</span> <span class="o">&gt;</span> <span class="nx">endIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// ... going right</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselecting towards anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="nx">startIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">min</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">,</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">);</span>
<span class="nx">endIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">max</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">,</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">);</span>
<span class="c">// Unselect the horiz block on this row towards the previous row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Arrow right</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">39</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Selecting away from anchor cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&lt;=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select the next vert block to the right...</span>
<span class="c"></span> <span class="c">// ...making sure there is room</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&lt;</span> <span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select in order from anchor to trigger...</span>
<span class="c"></span> <span class="nx">startIndex</span> <span class="o">=</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span>
<span class="nx">endIndex</span> <span class="o">=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span>
<span class="c">// ...going up</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">startIndex</span> <span class="o">&gt;</span> <span class="nx">endIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">+</span><span class="m">1</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// ... going down</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">+</span><span class="m">1</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselecting towards anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Unselect the vert block on this column towards the right</span>
<span class="c"></span> <span class="nx">startIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">min</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">,</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">);</span>
<span class="nx">endIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">max</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">,</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">);</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Arrow left</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">37</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Selecting away from anchor cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&gt;=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//Select the previous vert block to the left</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select in order from anchor to trigger...</span>
<span class="c"></span> <span class="nx">startIndex</span> <span class="o">=</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span>
<span class="nx">endIndex</span> <span class="o">=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span>
<span class="c">// ...going up</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">startIndex</span> <span class="o">&gt;</span> <span class="nx">endIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">-</span><span class="m">1</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// ... going down</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">-</span><span class="m">1</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselecting towards anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Unselect the vert block on this column towards the left</span>
<span class="c"></span> <span class="nx">startIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">min</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">,</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">);</span>
<span class="nx">endIndex</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">max</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">,</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">);</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">startIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">endIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Determines selection behavior resulting from a mouse event when selection mode</span>
<span class="c"> * is set to &quot;cellrange&quot;.</span>
<span class="c"> *</span>
<span class="c"> * @method _handleCellRangeSelectionByMouse</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_handleCellRangeSelectionByMouse</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">;</span>
<span class="c">// Validate target cell</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTargetCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTargetCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">e</span> <span class="o">=</span> <span class="nx">oArgs</span><span class="o">.</span><span class="nx">event</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">bSHIFT</span> <span class="o">=</span> <span class="nx">e</span><span class="o">.</span><span class="nx">shiftKey</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">bCTRL</span> <span class="o">=</span> <span class="nx">e</span><span class="o">.</span><span class="nx">ctrlKey</span> <span class="o">||</span> <span class="o">((</span><span class="nx">navigator</span><span class="o">.</span><span class="nx">userAgent</span><span class="o">.</span><span class="nx">toLowerCase</span><span class="o">().</span><span class="nx">indexOf</span><span class="o">(</span><span class="s2">&quot;mac&quot;</span><span class="o">)</span> <span class="o">!=</span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="nx">e</span><span class="o">.</span><span class="nx">metaKey</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elTargetRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">elTargetCell</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">nTargetTrIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrIndex</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">oTargetColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elTargetCell</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">nTargetColKeyIndex</span> <span class="o">=</span> <span class="nx">oTargetColumn</span><span class="o">.</span><span class="nx">getKeyIndex</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">oTargetRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">nTargetRecordIndex</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecordIndex</span><span class="o">(</span><span class="nx">oTargetRecord</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">oTargetCell</span> <span class="o">=</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oTargetRecord</span><span class="o">,</span> <span class="nx">column</span><span class="o">:</span><span class="nx">oTargetColumn</span><span class="o">};</span>
<span class="k">var</span> <span class="nx">oAnchor</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getSelectionAnchor</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTbodyEl</span><span class="o">().</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">currentRow</span><span class="o">,</span> <span class="nx">i</span><span class="o">,</span> <span class="nx">j</span><span class="o">;</span>
<span class="c">// Both SHIFT and CTRL</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">bSHIFT</span> <span class="o">&amp;&amp;</span> <span class="nx">bCTRL</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Validate anchor</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Anchor is selected</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">isSelected</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">cell</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// All cells are on the same row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">===</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select all cells between anchor cell and target cell, including target cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetColKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">+</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">nTargetColKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select all cells between target cell and anchor cell, including target cell</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nTargetColKeyIndex</span> <span class="o">&lt;</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">nTargetColKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor row is above target row</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select all cells on anchor row from anchor cell to the end of the row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">+</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="c">// Select all cells on all rows between anchor row and target row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">+</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">nTargetTrIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">j</span><span class="o">++){</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select all cells on target row from first cell to the target cell</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">nTargetColKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor row is below target row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Select all cells on target row from target cell to the end of the row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">nTargetColKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="c">// Select all cells on all rows between target row and anchor row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">nTargetTrIndex</span><span class="o">+</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">j</span><span class="o">++){</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select all cells on anchor row from first cell to the anchor cell</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor cell is unselected</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// All cells are on the same row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">===</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Unselect all cells between anchor cell and target cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetColKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">+</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">nTargetColKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select all cells between target cell and anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nTargetColKeyIndex</span> <span class="o">&lt;</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">nTargetColKeyIndex</span><span class="o">+</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor row is above target row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Unselect all cells from anchor cell to target cell</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">nTargetTrIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">currentRow</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="c">// This is the anchor row, only unselect cells after the anchor cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span> <span class="o">===</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">j</span><span class="o">&gt;</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// This is the target row, only unelect cells before the target cell</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span> <span class="o">===</span> <span class="nx">nTargetTrIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">j</span><span class="o">&lt;</span><span class="nx">nTargetColKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselect all cells on this row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor row is below target row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Unselect all cells from target cell to anchor cell</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">nTargetTrIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">currentRow</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="c">// This is the target row, only unselect cells after the target cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span> <span class="o">==</span> <span class="nx">nTargetTrIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">j</span><span class="o">&gt;</span><span class="nx">nTargetColKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// This is the anchor row, only unselect cells before the anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span> <span class="o">==</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">j</span><span class="o">&lt;</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselect all cells on this row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select the target cell</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Invalid anchor</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Set anchor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span> <span class="o">=</span> <span class="nx">oTargetCell</span><span class="o">;</span>
<span class="c">// Toggle selection of target</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">isSelected</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Only SHIFT</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">bSHIFT</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectAllCells</span><span class="o">();</span>
<span class="c">// Validate anchor</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// All cells are on the same row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">===</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select all cells between anchor cell and target cell,</span>
<span class="c"></span> <span class="c">// including the anchor cell and target cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetColKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">nTargetColKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select all cells between target cell and anchor cell</span>
<span class="c"></span> <span class="c">// including the target cell and anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nTargetColKeyIndex</span> <span class="o">&lt;</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">nTargetColKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor row is above target row</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;</span> <span class="nx">nTargetRecordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select all cells from anchor cell to target cell</span>
<span class="c"></span> <span class="c">// including the anchor cell and target cell</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">nTargetTrIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">currentRow</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="c">// This is the anchor row, only select the anchor cell and after</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span> <span class="o">==</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">j</span><span class="o">&gt;=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// This is the target row, only select the target cell and before</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span> <span class="o">==</span> <span class="nx">nTargetTrIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">j</span><span class="o">&lt;=</span><span class="nx">nTargetColKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select all cells on this row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor row is below target row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Select all cells from target cell to anchor cell,</span>
<span class="c"></span> <span class="c">// including the target cell and anchor cell</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">nTargetTrIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="nx">currentRow</span> <span class="o">=</span> <span class="nx">allRows</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="c">// This is the target row, only select the target cell and after</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span> <span class="o">==</span> <span class="nx">nTargetTrIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">j</span><span class="o">&gt;=</span><span class="nx">nTargetColKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// This is the anchor row, only select the anchor cell and before</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">sectionRowIndex</span> <span class="o">==</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">trIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">j</span><span class="o">&lt;=</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Select all cells on this row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">currentRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Invalid anchor</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Set anchor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span> <span class="o">=</span> <span class="nx">oTargetCell</span><span class="o">;</span>
<span class="c">// Select target only</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Only CTRL</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">bCTRL</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Set anchor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span> <span class="o">=</span> <span class="nx">oTargetCell</span><span class="o">;</span>
<span class="c">// Toggle selection of target</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">isSelected</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Neither SHIFT nor CTRL</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_handleSingleCellSelectionByMouse</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Determines selection behavior resulting from a key event when selection mode</span>
<span class="c"> * is set to &quot;cellrange&quot;.</span>
<span class="c"> *</span>
<span class="c"> * @method _handleCellRangeSelectionByKey</span>
<span class="c"> * @param e {HTMLEvent} Event object.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_handleCellRangeSelectionByKey</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nKey</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getCharCode</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">bSHIFT</span> <span class="o">=</span> <span class="nx">e</span><span class="o">.</span><span class="nx">shiftKey</span><span class="o">;</span>
<span class="k">if</span><span class="o">((</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">9</span><span class="o">)</span> <span class="o">||</span> <span class="o">!</span><span class="nx">bSHIFT</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_handleSingleCellSelectionByKey</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">((</span><span class="nx">nKey</span> <span class="o">&gt;</span> <span class="m">36</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">nKey</span> <span class="o">&lt;</span> <span class="m">41</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Validate trigger</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oTrigger</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getSelectionTrigger</span><span class="o">();</span>
<span class="c">// Arrow selection only works if last selected row is on current page</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">oTrigger</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">stopEvent</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="c">// Validate anchor</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oAnchor</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getSelectionAnchor</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">i</span><span class="o">,</span> <span class="nx">elNewRow</span><span class="o">,</span> <span class="nx">elNew</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">allRows</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTbodyEl</span><span class="o">().</span><span class="nx">rows</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elThisRow</span> <span class="o">=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">;</span>
<span class="c">// Arrow down</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">40</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elNewRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getNextTrEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">);</span>
<span class="c">// Selecting away from anchor cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select all cells to the end of this row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">+</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++){</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Select some of the cells on the next row down</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elNewRow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;=</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++){</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselecting towards anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Unselect all cells to the end of this row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++){</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="c">// Unselect some of the cells on the next row down</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elNewRow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">++){</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Arrow up</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">38</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elNewRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getPreviousTrEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">);</span>
<span class="c">// Selecting away from anchor cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&gt;=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select all the cells to the beginning of this row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">--){</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Select some of the cells from the end of the previous row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elNewRow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;=</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">--){</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselecting towards anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Unselect all the cells to the beginning of this row</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">--){</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="c">// Unselect some of the cells from the end of the previous row</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elNewRow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">i</span><span class="o">=</span><span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">;</span> <span class="nx">i</span><span class="o">--){</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Arrow right</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">39</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elNewRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getNextTrEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">);</span>
<span class="c">// Selecting away from anchor cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select the next cell to the right</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&lt;</span> <span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">+</span><span class="m">1</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Select the first cell of the next row</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">elNewRow</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="m">0</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselecting towards anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&gt;</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">]);</span>
<span class="c">// Unselect this cell towards the right</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&lt;</span> <span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span>
<span class="o">}</span>
<span class="c">// Unselect this cells towards the first cell of the next row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor is on this row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Selecting away from anchor</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&lt;=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select the next cell to the right</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&lt;</span> <span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">+</span><span class="m">1</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Select the first cell on the next row</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">trIndex</span> <span class="o">&lt;</span> <span class="nx">allRows</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">){</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="m">0</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselecting towards anchor</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Unselect this cell towards the right</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Arrow left</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">37</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elNewRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getPreviousTrEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">);</span>
<span class="c">// Unselecting towards the anchor</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&lt;</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">]);</span>
<span class="c">// Unselect this cell towards the left</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="o">}</span>
<span class="c">// Unselect this cell towards the last cell of the previous row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Selecting towards the anchor</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">recordIndex</span> <span class="o">&gt;</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">recordIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select the next cell to the left</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">-</span><span class="m">1</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Select the last cell of the previous row</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">trIndex</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">){</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Anchor is on this row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="c">// Selecting away from anchor cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oAnchor</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&gt;=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Select the next cell to the left</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">-</span><span class="m">1</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Select the last cell of the previous row</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">trIndex</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">){</span>
<span class="nx">elNew</span> <span class="o">=</span> <span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">elNewRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">];</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Unselecting towards anchor cell</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unselectCell</span><span class="o">(</span><span class="nx">elThisRow</span><span class="o">.</span><span class="nx">cells</span><span class="o">[</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span><span class="o">]);</span>
<span class="c">// Unselect this cell towards the left</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">colKeyIndex</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="o">}</span>
<span class="c">// Unselect this cell towards the last cell of the previous row</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Determines selection behavior resulting from a mouse event when selection mode</span>
<span class="c"> * is set to &quot;singlecell&quot;.</span>
<span class="c"> *</span>
<span class="c"> * @method _handleSingleCellSelectionByMouse</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_handleSingleCellSelectionByMouse</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTarget</span> <span class="o">=</span> <span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">;</span>
<span class="c">// Validate target cell</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elTargetCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">elTarget</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elTargetCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elTargetRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">elTargetCell</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">oTargetRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elTargetRow</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">oTargetColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elTargetCell</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">oTargetCell</span> <span class="o">=</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oTargetRecord</span><span class="o">,</span> <span class="nx">column</span><span class="o">:</span><span class="nx">oTargetColumn</span><span class="o">};</span>
<span class="c">// Set anchor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span> <span class="o">=</span> <span class="nx">oTargetCell</span><span class="o">;</span>
<span class="c">// Select only target</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">unselectAllCells</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">oTargetCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Determines selection behavior resulting from a key event when selection mode</span>
<span class="c"> * is set to &quot;singlecell&quot;.</span>
<span class="c"> *</span>
<span class="c"> * @method _handleSingleCellSelectionByKey</span>
<span class="c"> * @param e {HTMLEvent} Event object.</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_handleSingleCellSelectionByKey</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">nKey</span> <span class="o">=</span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">getCharCode</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="k">if</span><span class="o">((</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">9</span><span class="o">)</span> <span class="o">||</span> <span class="o">((</span><span class="nx">nKey</span> <span class="o">&gt;</span> <span class="m">36</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">nKey</span> <span class="o">&lt;</span> <span class="m">41</span><span class="o">)))</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">bSHIFT</span> <span class="o">=</span> <span class="nx">e</span><span class="o">.</span><span class="nx">shiftKey</span><span class="o">;</span>
<span class="c">// Validate trigger</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oTrigger</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_getSelectionTrigger</span><span class="o">();</span>
<span class="c">// Arrow selection only works if last selected row is on current page</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">oTrigger</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Determine the new cell to select</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elNew</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">40</span><span class="o">)</span> <span class="o">{</span> <span class="c">// Arrow down</span>
<span class="c"></span> <span class="nx">elNew</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getBelowTdEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">);</span>
<span class="c">// Validate new cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elNew</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: wrap around to first tr on current page</span>
<span class="c"></span>
<span class="c">//TODO: wrap forward to first tr of next page</span>
<span class="c"></span>
<span class="c">// Bottom selection is sticky</span>
<span class="c"></span> <span class="nx">elNew</span> <span class="o">=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">38</span><span class="o">)</span> <span class="o">{</span> <span class="c">// Arrow up</span>
<span class="c"></span> <span class="nx">elNew</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getAboveTdEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">);</span>
<span class="c">// Validate new cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elNew</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: wrap around to last tr on current page</span>
<span class="c"></span>
<span class="c">//TODO: wrap back to last tr of previous page</span>
<span class="c"></span>
<span class="c">// Top selection is sticky</span>
<span class="c"></span> <span class="nx">elNew</span> <span class="o">=</span> <span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">((</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">39</span><span class="o">)</span> <span class="o">||</span> <span class="o">(!</span><span class="nx">bSHIFT</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">9</span><span class="o">)))</span> <span class="o">{</span> <span class="c">// Arrow right or tab</span>
<span class="c"></span> <span class="nx">elNew</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getNextTdEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">);</span>
<span class="c">// Validate new cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elNew</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: wrap around to first td on current page</span>
<span class="c"></span>
<span class="c">//TODO: wrap forward to first td of next page</span>
<span class="c"></span>
<span class="c">// Top-left selection is sticky, and release TAB focus</span>
<span class="c"></span> <span class="c">//elNew = oTrigger.el;</span>
<span class="c"></span> <span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">((</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">37</span><span class="o">)</span> <span class="o">||</span> <span class="o">(</span><span class="nx">bSHIFT</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">nKey</span> <span class="o">==</span> <span class="m">9</span><span class="o">)))</span> <span class="o">{</span> <span class="c">// Arrow left or shift-tab</span>
<span class="c"></span> <span class="nx">elNew</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getPreviousTdEl</span><span class="o">(</span><span class="nx">oTrigger</span><span class="o">.</span><span class="nx">el</span><span class="o">);</span>
<span class="c">// Validate new cell</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elNew</span> <span class="o">===</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: wrap around to last td on current page</span>
<span class="c"></span>
<span class="c">//TODO: wrap back to last td of previous page</span>
<span class="c"></span>
<span class="c">// Bottom-right selection is sticky, and release TAB focus</span>
<span class="c"></span> <span class="c">//elNew = oTrigger.el;</span>
<span class="c"></span> <span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">stopEvent</span><span class="o">(</span><span class="nx">e</span><span class="o">);</span>
<span class="c">// Unselect all cells</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">unselectAllCells</span><span class="o">();</span>
<span class="c">// Select the new cell</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">selectCell</span><span class="o">(</span><span class="nx">elNew</span><span class="o">);</span>
<span class="c">// Set new anchor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span> <span class="o">=</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elNew</span><span class="o">),</span> <span class="nx">column</span><span class="o">:</span><span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elNew</span><span class="o">)};</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns array of selected TR elements on the page.</span>
<span class="c"> *</span>
<span class="c"> * @method getSelectedTrEls</span>
<span class="c"> * @return {HTMLElement[]} Array of selected TR elements.</span>
<span class="c"> */</span>
<span class="nx">getSelectedTrEls</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">getElementsByClassName</span><span class="o">(</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">,</span><span class="s2">&quot;tr&quot;</span><span class="o">,</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Sets given row to the selected state.</span>
<span class="c"> *</span>
<span class="c"> * @method selectRow</span>
<span class="c"> * @param row {HTMLElement | String | YAHOO.widget.Record | Number} HTML element</span>
<span class="c"> * reference or ID string, Record instance, or RecordSet position index.</span>
<span class="c"> */</span>
<span class="nx">selectRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">elRow</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">row</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Record</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">row</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elRow</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Update selection trackers</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">||</span> <span class="o">[];</span>
<span class="k">var</span> <span class="nx">sRecordId</span> <span class="o">=</span> <span class="nx">oRecord</span><span class="o">.</span><span class="nx">getId</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">index</span> <span class="o">=</span> <span class="o">-</span><span class="m">1</span><span class="o">;</span>
<span class="c">// Remove if already there:</span>
<span class="c"></span> <span class="c">// Use Array.indexOf if available...</span>
<span class="c"></span> <span class="c">/*if(tracker.indexOf &amp;&amp; (tracker.indexOf(sRecordId) &gt; -1)) {</span>
<span class="c"> tracker.splice(tracker.indexOf(sRecordId),1);</span>
<span class="c"> }*/</span>
<span class="k">if</span><span class="o">(</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">index</span> <span class="o">=</span> <span class="nx">tracker</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">(</span><span class="nx">sRecordId</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// ...or do it the old-fashioned way</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">]</span> <span class="o">===</span> <span class="nx">sRecordId</span><span class="o">){</span>
<span class="nx">index</span> <span class="o">=</span> <span class="nx">j</span><span class="o">;</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">index</span> <span class="o">&gt;</span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">tracker</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">index</span><span class="o">,</span><span class="m">1</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Add to the end</span>
<span class="c"></span> <span class="nx">tracker</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">sRecordId</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">=</span> <span class="nx">tracker</span><span class="o">;</span>
<span class="c">// Update trackers</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorRecord</span> <span class="o">=</span> <span class="nx">oRecord</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Update UI</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">elRow</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elRow</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowSelectEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">el</span><span class="o">:</span><span class="nx">elRow</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Selected &quot;</span> <span class="o">+</span> <span class="nx">elRow</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not select row &quot;</span> <span class="o">+</span> <span class="nx">row</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Sets given row to the selected state.</span>
<span class="c"> *</span>
<span class="c"> * @method unselectRow</span>
<span class="c"> * @param row {HTMLElement | String | YAHOO.widget.Record | Number} HTML element</span>
<span class="c"> * reference or ID string, Record instance, or RecordSet position index.</span>
<span class="c"> */</span>
<span class="nx">unselectRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">oRecord</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">row</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Record</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">row</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elRow</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Update selection trackers</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">||</span> <span class="o">[];</span>
<span class="k">var</span> <span class="nx">sRecordId</span> <span class="o">=</span> <span class="nx">oRecord</span><span class="o">.</span><span class="nx">getId</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">index</span> <span class="o">=</span> <span class="o">-</span><span class="m">1</span><span class="o">;</span>
<span class="c">// Use Array.indexOf if available...</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">index</span> <span class="o">=</span> <span class="nx">tracker</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">(</span><span class="nx">sRecordId</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// ...or do it the old-fashioned way</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">]</span> <span class="o">===</span> <span class="nx">sRecordId</span><span class="o">){</span>
<span class="nx">index</span> <span class="o">=</span> <span class="nx">j</span><span class="o">;</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">index</span> <span class="o">&gt;</span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Update tracker</span>
<span class="c"></span> <span class="nx">tracker</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">index</span><span class="o">,</span><span class="m">1</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">=</span> <span class="nx">tracker</span><span class="o">;</span>
<span class="c">// Update the UI</span>
<span class="c"></span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">elRow</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowUnselectEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">el</span><span class="o">:</span><span class="nx">elRow</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Unselected &quot;</span> <span class="o">+</span> <span class="nx">elRow</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not unselect row &quot;</span> <span class="o">+</span> <span class="nx">row</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Clears out all row selections.</span>
<span class="c"> *</span>
<span class="c"> * @method unselectAllRows</span>
<span class="c"> */</span>
<span class="nx">unselectAllRows</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">// Remove all rows from tracker</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">||</span> <span class="o">[],</span>
<span class="nx">recId</span><span class="o">,</span>
<span class="nx">removed</span> <span class="o">=</span> <span class="o">[];</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">])){</span>
<span class="nx">recId</span> <span class="o">=</span> <span class="nx">tracker</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">j</span><span class="o">,</span><span class="m">1</span><span class="o">);</span>
<span class="nx">removed</span><span class="o">[</span><span class="nx">removed</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isArray</span><span class="o">(</span><span class="nx">recId</span><span class="o">)</span> <span class="o">?</span> <span class="nx">recId</span><span class="o">[</span><span class="m">0</span><span class="o">]</span> <span class="o">:</span> <span class="nx">recId</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Update tracker</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">=</span> <span class="nx">tracker</span><span class="o">;</span>
<span class="c">// Update UI</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_unselectAllTrEls</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;unselectAllRowsEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">records</span><span class="o">:</span> <span class="nx">removed</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Unselected all rows&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Convenience method to remove the class YAHOO.widget.DataTable.CLASS_SELECTED</span>
<span class="c"> * from all TD elements in the internal tracker.</span>
<span class="c"> *</span>
<span class="c"> * @method _unselectAllTdEls</span>
<span class="c"> * @private</span>
<span class="c"> */</span>
<span class="nx">_unselectAllTdEls</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">selectedCells</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">getElementsByClassName</span><span class="o">(</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">,</span><span class="s2">&quot;td&quot;</span><span class="o">,</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">);</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">selectedCells</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns array of selected TD elements on the page.</span>
<span class="c"> *</span>
<span class="c"> * @method getSelectedTdEls</span>
<span class="c"> * @return {HTMLElement[]} Array of selected TD elements.</span>
<span class="c"> */</span>
<span class="nx">getSelectedTdEls</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">getElementsByClassName</span><span class="o">(</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">,</span><span class="s2">&quot;td&quot;</span><span class="o">,</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Sets given cell to the selected state.</span>
<span class="c"> *</span>
<span class="c"> * @method selectCell</span>
<span class="c"> * @param cell {HTMLElement | String} DOM element reference or ID string</span>
<span class="c"> * to DataTable page element or RecordSet index.</span>
<span class="c"> */</span>
<span class="nx">selectCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">cell</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: accept {record} in selectCell()</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">cell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">sColumnKey</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">).</span><span class="nx">getKey</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oRecord</span> <span class="o">&amp;&amp;</span> <span class="nx">sColumnKey</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Get Record ID</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">||</span> <span class="o">[];</span>
<span class="k">var</span> <span class="nx">sRecordId</span> <span class="o">=</span> <span class="nx">oRecord</span><span class="o">.</span><span class="nx">getId</span><span class="o">();</span>
<span class="c">// Remove if there</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">recordId</span> <span class="o">===</span> <span class="nx">sRecordId</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">columnKey</span> <span class="o">===</span> <span class="nx">sColumnKey</span><span class="o">)){</span>
<span class="nx">tracker</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">j</span><span class="o">,</span><span class="m">1</span><span class="o">);</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Add to the end</span>
<span class="c"></span> <span class="nx">tracker</span><span class="o">.</span><span class="nx">push</span><span class="o">({</span><span class="nx">recordId</span><span class="o">:</span><span class="nx">sRecordId</span><span class="o">,</span> <span class="nx">columnKey</span><span class="o">:</span><span class="nx">sColumnKey</span><span class="o">});</span>
<span class="c">// Update trackers</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">=</span> <span class="nx">tracker</span><span class="o">;</span>
<span class="k">if</span><span class="o">(!</span><span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oAnchorCell</span> <span class="o">=</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">column</span><span class="o">:</span><span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">sColumnKey</span><span class="o">)};</span>
<span class="o">}</span>
<span class="c">// Update the UI</span>
<span class="c"></span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elCell</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;cellSelectEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">column</span><span class="o">:</span><span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">),</span> <span class="nx">key</span><span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">).</span><span class="nx">getKey</span><span class="o">(),</span> <span class="nx">el</span><span class="o">:</span><span class="nx">elCell</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Selected &quot;</span> <span class="o">+</span> <span class="nx">elCell</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not select cell &quot;</span> <span class="o">+</span> <span class="nx">cell</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Sets given cell to the unselected state.</span>
<span class="c"> *</span>
<span class="c"> * @method unselectCell</span>
<span class="c"> * @param cell {HTMLElement | String} DOM element reference or ID string</span>
<span class="c"> * to DataTable page element or RecordSet index.</span>
<span class="c"> */</span>
<span class="nx">unselectCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">cell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">cell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">sColumnKey</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">).</span><span class="nx">getKey</span><span class="o">();</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oRecord</span> <span class="o">&amp;&amp;</span> <span class="nx">sColumnKey</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Get Record ID</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">||</span> <span class="o">[];</span>
<span class="k">var</span> <span class="nx">id</span> <span class="o">=</span> <span class="nx">oRecord</span><span class="o">.</span><span class="nx">getId</span><span class="o">();</span>
<span class="c">// Is it selected?</span>
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">recordId</span> <span class="o">===</span> <span class="nx">id</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">columnKey</span> <span class="o">===</span> <span class="nx">sColumnKey</span><span class="o">)){</span>
<span class="c">// Remove from tracker</span>
<span class="c"></span> <span class="nx">tracker</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">j</span><span class="o">,</span><span class="m">1</span><span class="o">);</span>
<span class="c">// Update tracker</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">=</span> <span class="nx">tracker</span><span class="o">;</span>
<span class="c">// Update the UI</span>
<span class="c"></span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">elCell</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;cellUnselectEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">column</span><span class="o">:</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">),</span> <span class="nx">key</span><span class="o">:</span><span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">).</span><span class="nx">getKey</span><span class="o">(),</span> <span class="nx">el</span><span class="o">:</span><span class="nx">elCell</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Unselected &quot;</span> <span class="o">+</span> <span class="nx">elCell</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not unselect cell &quot;</span> <span class="o">+</span> <span class="nx">cell</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Clears out all cell selections.</span>
<span class="c"> *</span>
<span class="c"> * @method unselectAllCells</span>
<span class="c"> */</span>
<span class="nx">unselectAllCells</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">// Remove all cells from tracker</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">||</span> <span class="o">[];</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isObject</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">])){</span>
<span class="nx">tracker</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">j</span><span class="o">,</span><span class="m">1</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Update tracker</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">=</span> <span class="nx">tracker</span><span class="o">;</span>
<span class="c">// Update UI</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_unselectAllTdEls</span><span class="o">();</span>
<span class="c">//TODO: send data to unselectAllCellsEvent handler</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;unselectAllCellsEvent&quot;</span><span class="o">);</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Unselected all cells&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns true if given item is selected, false otherwise.</span>
<span class="c"> *</span>
<span class="c"> * @method isSelected</span>
<span class="c"> * @param o {String | HTMLElement | YAHOO.widget.Record | Number</span>
<span class="c"> * {record:YAHOO.widget.Record, column:YAHOO.widget.Column} } TR or TD element by</span>
<span class="c"> * reference or ID string, a Record instance, a RecordSet position index,</span>
<span class="c"> * or an object literal representation</span>
<span class="c"> * of a cell.</span>
<span class="c"> * @return {Boolean} True if item is selected.</span>
<span class="c"> */</span>
<span class="nx">isSelected</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">o</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">o</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">o</span><span class="o">.</span><span class="nx">ownerDocument</span> <span class="o">==</span> <span class="nb">document</span><span class="o">))</span> <span class="o">{</span>
<span class="k">return</span> <span class="o">(</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">hasClass</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">o</span><span class="o">),</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">)</span> <span class="o">||</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">hasClass</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">o</span><span class="o">),</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_SELECTED</span><span class="o">));</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">sRecordId</span><span class="o">,</span> <span class="nx">j</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">tracker</span> <span class="o">&amp;&amp;</span> <span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Looking for a Record?</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">o</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Record</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oRecord</span> <span class="o">=</span> <span class="nx">o</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">o</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">o</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oRecord</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">sRecordId</span> <span class="o">=</span> <span class="nx">oRecord</span><span class="o">.</span><span class="nx">getId</span><span class="o">();</span>
<span class="c">// Is it there?</span>
<span class="c"></span> <span class="c">// Use Array.indexOf if available...</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">(</span><span class="nx">sRecordId</span><span class="o">)</span> <span class="o">&gt;</span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// ...or do it the old-fashioned way</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">]</span> <span class="o">===</span> <span class="nx">sRecordId</span><span class="o">){</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Looking for a cell</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">o</span><span class="o">.</span><span class="nx">record</span> <span class="o">&amp;&amp;</span> <span class="nx">o</span><span class="o">.</span><span class="nx">column</span><span class="o">){</span>
<span class="nx">sRecordId</span> <span class="o">=</span> <span class="nx">o</span><span class="o">.</span><span class="nx">record</span><span class="o">.</span><span class="nx">getId</span><span class="o">();</span>
<span class="k">var</span> <span class="nx">sColumnKey</span> <span class="o">=</span> <span class="nx">o</span><span class="o">.</span><span class="nx">column</span><span class="o">.</span><span class="nx">getKey</span><span class="o">();</span>
<span class="k">for</span><span class="o">(</span><span class="nx">j</span><span class="o">=</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">j</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">recordId</span> <span class="o">===</span> <span class="nx">sRecordId</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">columnKey</span> <span class="o">===</span> <span class="nx">sColumnKey</span><span class="o">)){</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns selected rows as an array of Record IDs.</span>
<span class="c"> *</span>
<span class="c"> * @method getSelectedRows</span>
<span class="c"> * @return {String[]} Array of selected rows by Record ID.</span>
<span class="c"> */</span>
<span class="nx">getSelectedRows</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">aSelectedRows</span> <span class="o">=</span> <span class="o">[];</span>
<span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">||</span> <span class="o">[];</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">])){</span>
<span class="nx">aSelectedRows</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">aSelectedRows</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns selected cells as an array of object literals:</span>
<span class="c"> * {recordId:sRecordId, columnKey:sColumnKey}.</span>
<span class="c"> *</span>
<span class="c"> * @method getSelectedCells</span>
<span class="c"> * @return {Object[]} Array of selected cells by Record ID and Column ID.</span>
<span class="c"> */</span>
<span class="nx">getSelectedCells</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">aSelectedCells</span> <span class="o">=</span> <span class="o">[];</span>
<span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span> <span class="o">||</span> <span class="o">[];</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">j</span><span class="o">&lt;</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">]</span> <span class="o">&amp;&amp;</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isObject</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">])){</span>
<span class="nx">aSelectedCells</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">aSelectedCells</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns last selected Record ID.</span>
<span class="c"> *</span>
<span class="c"> * @method getLastSelectedRecord</span>
<span class="c"> * @return {String} Record ID of last selected row.</span>
<span class="c"> */</span>
<span class="nx">getLastSelectedRecord</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">tracker</span> <span class="o">&amp;&amp;</span> <span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">i</span><span class="o">])){</span>
<span class="k">return</span> <span class="nx">tracker</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Returns last selected cell as an object literal:</span>
<span class="c"> * {recordId:sRecordId, columnKey:sColumnKey}.</span>
<span class="c"> *</span>
<span class="c"> * @method getLastSelectedCell</span>
<span class="c"> * @return {Object} Object literal representation of a cell.</span>
<span class="c"> */</span>
<span class="nx">getLastSelectedCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aSelections</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">tracker</span> <span class="o">&amp;&amp;</span> <span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="nx">tracker</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">&gt;-</span><span class="m">1</span><span class="o">;</span> <span class="nx">i</span><span class="o">--)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">tracker</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">recordId</span> <span class="o">&amp;&amp;</span> <span class="nx">tracker</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">columnKey</span><span class="o">){</span>
<span class="k">return</span> <span class="nx">tracker</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Assigns the class YAHOO.widget.DataTable.CLASS_HIGHLIGHTED to the given row.</span>
<span class="c"> *</span>
<span class="c"> * @method highlightRow</span>
<span class="c"> * @param row {HTMLElement | String} DOM element reference or ID string.</span>
<span class="c"> */</span>
<span class="nx">highlightRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elRow</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Make sure previous row is unhighlighted</span>
<span class="c">/* if(this._sLastHighlightedTrElId) {</span>
<span class="c"> Dom.removeClass(this._sLastHighlightedTrElId,DT.CLASS_HIGHLIGHTED);</span>
<span class="c"> }*/</span>
<span class="k">var</span> <span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elRow</span><span class="o">);</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elRow</span><span class="o">,</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_HIGHLIGHTED</span><span class="o">);</span>
<span class="c">//this._sLastHighlightedTrElId = elRow.id;</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowHighlightEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">el</span><span class="o">:</span><span class="nx">elRow</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Highlighted &quot;</span> <span class="o">+</span> <span class="nx">elRow</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not highlight row &quot;</span> <span class="o">+</span> <span class="nx">row</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Removes the class YAHOO.widget.DataTable.CLASS_HIGHLIGHTED from the given row.</span>
<span class="c"> *</span>
<span class="c"> * @method unhighlightRow</span>
<span class="c"> * @param row {HTMLElement | String} DOM element reference or ID string.</span>
<span class="c"> */</span>
<span class="nx">unhighlightRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">row</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elRow</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">row</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elRow</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elRow</span><span class="o">);</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">elRow</span><span class="o">,</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_HIGHLIGHTED</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;rowUnhighlightEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">el</span><span class="o">:</span><span class="nx">elRow</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Unhighlighted &quot;</span> <span class="o">+</span> <span class="nx">elRow</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not unhighlight row &quot;</span> <span class="o">+</span> <span class="nx">row</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Assigns the class YAHOO.widget.DataTable.CLASS_HIGHLIGHTED to the given cell.</span>
<span class="c"> *</span>
<span class="c"> * @method highlightCell</span>
<span class="c"> * @param cell {HTMLElement | String} DOM element reference or ID string.</span>
<span class="c"> */</span>
<span class="nx">highlightCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">cell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">cell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elCell</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Make sure previous cell is unhighlighted</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elLastHighlightedTd</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unhighlightCell</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elLastHighlightedTd</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">var</span> <span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">sColumnKey</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">).</span><span class="nx">getKey</span><span class="o">();</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elCell</span><span class="o">,</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_HIGHLIGHTED</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elLastHighlightedTd</span> <span class="o">=</span> <span class="nx">elCell</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;cellHighlightEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">column</span><span class="o">:</span><span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">),</span> <span class="nx">key</span><span class="o">:</span><span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">).</span><span class="nx">getKey</span><span class="o">(),</span> <span class="nx">el</span><span class="o">:</span><span class="nx">elCell</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Highlighted &quot;</span> <span class="o">+</span> <span class="nx">elCell</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not highlight cell &quot;</span> <span class="o">+</span> <span class="nx">cell</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Removes the class YAHOO.widget.DataTable.CLASS_HIGHLIGHTED from the given cell.</span>
<span class="c"> *</span>
<span class="c"> * @method unhighlightCell</span>
<span class="c"> * @param cell {HTMLElement | String} DOM element reference or ID string.</span>
<span class="c"> */</span>
<span class="nx">unhighlightCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">cell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">cell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">elCell</span><span class="o">,</span><span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_HIGHLIGHTED</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_elLastHighlightedTd</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;cellUnhighlightEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">record</span><span class="o">:</span><span class="nx">oRecord</span><span class="o">,</span> <span class="nx">column</span><span class="o">:</span><span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">),</span> <span class="nx">key</span><span class="o">:</span><span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">).</span><span class="nx">getKey</span><span class="o">(),</span> <span class="nx">el</span><span class="o">:</span><span class="nx">elCell</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Unhighlighted &quot;</span> <span class="o">+</span> <span class="nx">elCell</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not unhighlight cell &quot;</span> <span class="o">+</span> <span class="nx">cell</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">// INLINE EDITING</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Returns current CellEditor instance, or null.</span>
<span class="c"> * @method getCellEditor</span>
<span class="c"> * @return {YAHOO.widget.CellEditor} CellEditor instance.</span>
<span class="c"> */</span>
<span class="nx">getCellEditor</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Activates and shows CellEditor instance for the given cell while deactivating and</span>
<span class="c"> * canceling previous CellEditor. It is baked into DataTable that only one CellEditor</span>
<span class="c"> * can be active at any given time. </span>
<span class="c"> *</span>
<span class="c"> * @method showCellEditor</span>
<span class="c"> * @param elCell {HTMLElement | String} Cell to edit.</span>
<span class="c"> */</span>
<span class="nx">showCellEditor</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elCell</span><span class="o">,</span> <span class="nx">oRecord</span><span class="o">,</span> <span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Get a particular CellEditor</span>
<span class="c"></span> <span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elCell</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span> <span class="o">&amp;&amp;</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oCellEditor</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">;</span>
<span class="c">// Clean up active CellEditor</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oCellEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">cancel</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">cancel</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">isActive</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">cancelCellEditor</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">BaseCellEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Get CellEditor</span>
<span class="c"></span> <span class="nx">oCellEditor</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">ok</span> <span class="o">=</span> <span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">attach</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="nx">elCell</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">ok</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">move</span><span class="o">();</span>
<span class="nx">ok</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeShowCellEditor</span><span class="o">(</span><span class="nx">oCellEditor</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">ok</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">show</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span> <span class="o">=</span> <span class="nx">oCellEditor</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">oRecord</span> <span class="o">||</span> <span class="o">!(</span><span class="nx">oRecord</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Record</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oRecord</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">oColumn</span> <span class="o">||</span> <span class="o">!(</span><span class="nx">oColumn</span> <span class="k">instanceof</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">Column</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oRecord</span> <span class="o">&amp;&amp;</span> <span class="nx">oColumn</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(!</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">container</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_initCellEditorEl</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">// Update Editor values</span>
<span class="c"></span> <span class="nx">oCellEditor</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">;</span>
<span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">cell</span> <span class="o">=</span> <span class="nx">elCell</span><span class="o">;</span>
<span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">record</span> <span class="o">=</span> <span class="nx">oRecord</span><span class="o">;</span>
<span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">column</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">;</span>
<span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">validator</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">editorOptions</span> <span class="o">&amp;&amp;</span>
<span class="nx">lang</span><span class="o">.</span><span class="nx">isFunction</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">editorOptions</span><span class="o">.</span><span class="nx">validator</span><span class="o">))</span> <span class="o">?</span>
<span class="nx">oColumn</span><span class="o">.</span><span class="nx">editorOptions</span><span class="o">.</span><span class="nx">validator</span> <span class="o">:</span> <span class="kc">null</span><span class="o">;</span>
<span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">value</span> <span class="o">=</span> <span class="nx">oRecord</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">key</span><span class="o">);</span>
<span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">defaultValue</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="c">// Move Editor</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elContainer</span> <span class="o">=</span> <span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">container</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">x</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">getX</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">y</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">getY</span><span class="o">(</span><span class="nx">elCell</span><span class="o">);</span>
<span class="c">// SF doesn&#39;t get xy for cells in scrolling table</span>
<span class="c"></span> <span class="c">// when tbody display is set to block</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nb">isNaN</span><span class="o">(</span><span class="nx">x</span><span class="o">)</span> <span class="o">||</span> <span class="nb">isNaN</span><span class="o">(</span><span class="nx">y</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">x</span> <span class="o">=</span> <span class="nx">elCell</span><span class="o">.</span><span class="nx">offsetLeft</span> <span class="o">+</span> <span class="c">// cell pos relative to table</span>
<span class="c"></span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">getX</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">)</span> <span class="o">-</span> <span class="c">// plus table pos relative to document</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">scrollLeft</span><span class="o">;</span> <span class="c">// minus tbody scroll</span>
<span class="c"></span> <span class="nx">y</span> <span class="o">=</span> <span class="nx">elCell</span><span class="o">.</span><span class="nx">offsetTop</span> <span class="o">+</span> <span class="c">// cell pos relative to table</span>
<span class="c"></span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">getY</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">parentNode</span><span class="o">)</span> <span class="o">-</span> <span class="c">// plus table pos relative to document</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_elTbody</span><span class="o">.</span><span class="nx">scrollTop</span> <span class="o">+</span> <span class="c">// minus tbody scroll</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_elThead</span><span class="o">.</span><span class="nx">offsetHeight</span><span class="o">;</span> <span class="c">// account for fixed THEAD cells</span>
<span class="c"></span> <span class="o">}</span>
<span class="nx">elContainer</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">left</span> <span class="o">=</span> <span class="nx">x</span> <span class="o">+</span> <span class="s2">&quot;px&quot;</span><span class="o">;</span>
<span class="nx">elContainer</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">top</span> <span class="o">=</span> <span class="nx">y</span> <span class="o">+</span> <span class="s2">&quot;px&quot;</span><span class="o">;</span>
<span class="c">// Hook to customize the UI</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeShowCellEditor</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">);</span>
<span class="c">//TODO: This is temporarily up here due so elements can be focused</span>
<span class="c"></span> <span class="c">// Show Editor</span>
<span class="c"></span> <span class="nx">elContainer</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="c">// Handle ESC key</span>
<span class="c"></span> <span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">,</span> <span class="s2">&quot;keydown&quot;</span><span class="o">,</span> <span class="k">function</span><span class="o">(</span><span class="nx">e</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// ESC hides Cell Editor</span>
<span class="c"></span> <span class="k">if</span><span class="o">((</span><span class="nx">e</span><span class="o">.</span><span class="nx">keyCode</span> <span class="o">==</span> <span class="m">27</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">cancelCellEditor</span><span class="o">();</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">focusTbodyEl</span><span class="o">();</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorKeydownEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">editor</span><span class="o">:</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">,</span> <span class="nx">event</span><span class="o">:</span><span class="nx">e</span><span class="o">});</span>
<span class="o">}</span>
<span class="o">},</span> <span class="k">this</span><span class="o">);</span>
<span class="c">// Render Editor markup</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">fnEditor</span><span class="o">;</span>
<span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">switch</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">case</span> <span class="s2">&quot;checkbox&quot;</span><span class="o">:</span>
<span class="nx">fnEditor</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">editCheckbox</span><span class="o">;</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;date&quot;</span><span class="o">:</span>
<span class="nx">fnEditor</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">editDate</span><span class="o">;</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;dropdown&quot;</span><span class="o">:</span>
<span class="nx">fnEditor</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">editDropdown</span><span class="o">;</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;radio&quot;</span><span class="o">:</span>
<span class="nx">fnEditor</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">editRadio</span><span class="o">;</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;textarea&quot;</span><span class="o">:</span>
<span class="nx">fnEditor</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">editTextarea</span><span class="o">;</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="s2">&quot;textbox&quot;</span><span class="o">:</span>
<span class="nx">fnEditor</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">editTextbox</span><span class="o">;</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">default</span><span class="o">:</span>
<span class="nx">fnEditor</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isFunction</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">fnEditor</span> <span class="o">=</span> <span class="nx">oColumn</span><span class="o">.</span><span class="nx">editor</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span><span class="o">(</span><span class="nx">fnEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Create DOM input elements</span>
<span class="c"></span> <span class="nx">fnEditor</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="c">// Show Save/Cancel buttons</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">editorOptions</span> <span class="o">||</span> <span class="o">!</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">editorOptions</span><span class="o">.</span><span class="nx">disableBtns</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">showCellEditorBtns</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">isActive</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="c">//TODO: verify which args to pass</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorShowEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">editor</span><span class="o">:</span><span class="nx">oCellEditor</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Cell Editor shown for &quot;</span> <span class="o">+</span> <span class="nx">elCell</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Backward compatibility.</span>
<span class="c"> *</span>
<span class="c"> * @method _initCellEditorEl</span>
<span class="c"> * @private</span>
<span class="c"> * @deprecated </span>
<span class="c"> */</span>
<span class="nx">_initCellEditorEl</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">// Attach Cell Editor container element as first child of body</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elCellEditor</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;div&quot;</span><span class="o">);</span>
<span class="nx">elCellEditor</span><span class="o">.</span><span class="nx">id</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span> <span class="o">+</span> <span class="s2">&quot;-celleditor&quot;</span><span class="o">;</span>
<span class="nx">elCellEditor</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="nx">elCellEditor</span><span class="o">.</span><span class="nx">tabIndex</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elCellEditor</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_EDITOR</span><span class="o">);</span>
<span class="k">var</span> <span class="nx">elFirstChild</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">getFirstChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">body</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elFirstChild</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">elCellEditor</span> <span class="o">=</span> <span class="nx">Dom</span><span class="o">.</span><span class="nx">insertBefore</span><span class="o">(</span><span class="nx">elCellEditor</span><span class="o">,</span> <span class="nx">elFirstChild</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">elCellEditor</span> <span class="o">=</span> <span class="nb">document</span><span class="o">.</span><span class="nx">body</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nx">elCellEditor</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Internal tracker of Cell Editor values</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oCellEditor</span> <span class="o">=</span> <span class="o">{};</span>
<span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">container</span> <span class="o">=</span> <span class="nx">elCellEditor</span><span class="o">;</span>
<span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">value</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="nx">oCellEditor</span><span class="o">.</span><span class="nx">isActive</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span> <span class="o">=</span> <span class="nx">oCellEditor</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable abstract method to customize CellEditor before showing.</span>
<span class="c"> *</span>
<span class="c"> * @method doBeforeShowCellEditor</span>
<span class="c"> * @param oCellEditor {YAHOO.widget.CellEditor} The CellEditor instance.</span>
<span class="c"> * @return {Boolean} Return true to continue showing CellEditor.</span>
<span class="c"> */</span>
<span class="nx">doBeforeShowCellEditor</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oCellEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Saves active CellEditor input to Record and upates DOM UI.</span>
<span class="c"> *</span>
<span class="c"> * @method saveCellEditor</span>
<span class="c"> */</span>
<span class="nx">saveCellEditor</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">save</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">save</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">isActive</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">newData</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">value</span><span class="o">;</span>
<span class="c">// Copy the data to pass to the event</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oldData</span> <span class="o">=</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">widget</span><span class="o">.</span><span class="nx">DataTable</span><span class="o">.</span><span class="nx">_cloneObject</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">record</span><span class="o">.</span><span class="nx">getData</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">column</span><span class="o">.</span><span class="nx">key</span><span class="o">));</span>
<span class="c">// Validate input data</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">validator</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">newData</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">value</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">validator</span><span class="o">.</span><span class="nx">call</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="nx">newData</span><span class="o">,</span> <span class="nx">oldData</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">newData</span> <span class="o">===</span> <span class="kc">null</span> <span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">resetCellEditor</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorRevertEvent&quot;</span><span class="o">,</span>
<span class="o">{</span><span class="nx">editor</span><span class="o">:</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">,</span> <span class="nx">oldData</span><span class="o">:</span><span class="nx">oldData</span><span class="o">,</span> <span class="nx">newData</span><span class="o">:</span><span class="nx">newData</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not save Cell Editor input due to invalid data &quot;</span> <span class="o">+</span>
<span class="nx">lang</span><span class="o">.</span><span class="nx">dump</span><span class="o">(</span><span class="nx">newData</span><span class="o">),</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Update the Record</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">updateRecordValue</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">record</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">column</span><span class="o">.</span><span class="nx">key</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">value</span><span class="o">);</span>
<span class="c">// Update the UI</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">formatCell</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">cell</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">);</span>
<span class="c">// Bug fix 1764044</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">add</span><span class="o">({</span>
<span class="nx">method</span><span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">validateColumnWidths</span><span class="o">();</span>
<span class="o">},</span>
<span class="nx">scope</span><span class="o">:</span> <span class="k">this</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oChainRender</span><span class="o">.</span><span class="nx">run</span><span class="o">();</span>
<span class="c">// Clear out the Cell Editor</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">resetCellEditor</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorSaveEvent&quot;</span><span class="o">,</span>
<span class="o">{</span><span class="nx">editor</span><span class="o">:</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">,</span> <span class="nx">oldData</span><span class="o">:</span><span class="nx">oldData</span><span class="o">,</span> <span class="nx">newData</span><span class="o">:</span><span class="nx">newData</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Cell Editor input saved&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Cancels active CellEditor.</span>
<span class="c"> *</span>
<span class="c"> * @method cancelCellEditor</span>
<span class="c"> */</span>
<span class="nx">cancelCellEditor</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">cancel</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">cancel</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">isActive</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">resetCellEditor</span><span class="o">();</span>
<span class="c">//TODO: preserve values for the event?</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorCancelEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">editor</span><span class="o">:</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">});</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Cell Editor input canceled&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;CellEditor input canceled&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Destroys active CellEditor instance and UI.</span>
<span class="c"> *</span>
<span class="c"> * @method destroyCellEditor</span>
<span class="c"> */</span>
<span class="nx">destroyCellEditor</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">destroy</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Passes through showEvent of the active CellEditor.</span>
<span class="c"> *</span>
<span class="c"> * @method _onEditorShowEvent</span>
<span class="c"> * @param oArgs {Object} Custom Event args.</span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_onEditorShowEvent</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorShowEvent&quot;</span><span class="o">,</span> <span class="nx">oArgs</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Passes through keydownEvent of the active CellEditor.</span>
<span class="c"> * @param oArgs {Object} Custom Event args. </span>
<span class="c"> *</span>
<span class="c"> * @method _onEditorKeydownEvent</span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_onEditorKeydownEvent</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorKeydownEvent&quot;</span><span class="o">,</span> <span class="nx">oArgs</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Passes through revertEvent of the active CellEditor.</span>
<span class="c"> *</span>
<span class="c"> * @method _onEditorRevertEvent</span>
<span class="c"> * @param oArgs {Object} Custom Event args. </span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_onEditorRevertEvent</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorRevertEvent&quot;</span><span class="o">,</span> <span class="nx">oArgs</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Passes through saveEvent of the active CellEditor.</span>
<span class="c"> *</span>
<span class="c"> * @method _onEditorSaveEvent</span>
<span class="c"> * @param oArgs {Object} Custom Event args. </span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_onEditorSaveEvent</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorSaveEvent&quot;</span><span class="o">,</span> <span class="nx">oArgs</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Passes through cancelEvent of the active CellEditor.</span>
<span class="c"> *</span>
<span class="c"> * @method _onEditorCancelEvent</span>
<span class="c"> * @param oArgs {Object} Custom Event args.</span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_onEditorCancelEvent</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorCancelEvent&quot;</span><span class="o">,</span> <span class="nx">oArgs</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Passes through blurEvent of the active CellEditor.</span>
<span class="c"> *</span>
<span class="c"> * @method _onEditorBlurEvent</span>
<span class="c"> * @param oArgs {Object} Custom Event args. </span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_onEditorBlurEvent</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorBlurEvent&quot;</span><span class="o">,</span> <span class="nx">oArgs</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Passes through blockEvent of the active CellEditor.</span>
<span class="c"> *</span>
<span class="c"> * @method _onEditorBlockEvent</span>
<span class="c"> * @param oArgs {Object} Custom Event args. </span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_onEditorBlockEvent</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorBlockEvent&quot;</span><span class="o">,</span> <span class="nx">oArgs</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Passes through unblockEvent of the active CellEditor.</span>
<span class="c"> *</span>
<span class="c"> * @method _onEditorUnblockEvent</span>
<span class="c"> * @param oArgs {Object} Custom Event args. </span>
<span class="c"> * @private </span>
<span class="c"> */</span>
<span class="nx">_onEditorUnblockEvent</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;editorUnblockEvent&quot;</span><span class="o">,</span> <span class="nx">oArgs</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Public handler of the editorBlurEvent. By default, saves on blur if</span>
<span class="c"> * disableBtns is true, otherwise cancels on blur. </span>
<span class="c"> *</span>
<span class="c"> * @method onEditorBlurEvent</span>
<span class="c"> * @param oArgs {Object} Custom Event args. </span>
<span class="c"> */</span>
<span class="nx">onEditorBlurEvent</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">disableBtns</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Save on blur</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">save</span><span class="o">)</span> <span class="o">{</span> <span class="c">// Backward incompatible</span>
<span class="c"></span> <span class="nx">oArgs</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">save</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">cancel</span><span class="o">)</span> <span class="o">{</span> <span class="c">// Backward incompatible</span>
<span class="c"></span> <span class="c">// Cancel on blur</span>
<span class="c"></span> <span class="nx">oArgs</span><span class="o">.</span><span class="nx">editor</span><span class="o">.</span><span class="nx">cancel</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Public handler of the editorBlockEvent. By default, disables DataTable UI.</span>
<span class="c"> *</span>
<span class="c"> * @method onEditorBlockEvent</span>
<span class="c"> * @param oArgs {Object} Custom Event args. </span>
<span class="c"> */</span>
<span class="nx">onEditorBlockEvent</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">disable</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Public handler of the editorUnblockEvent. By default, undisables DataTable UI.</span>
<span class="c"> *</span>
<span class="c"> * @method onEditorUnblockEvent</span>
<span class="c"> * @param oArgs {Object} Custom Event args. </span>
<span class="c"> */</span>
<span class="nx">onEditorUnblockEvent</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">undisable</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">// ABSTRACT METHODS</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Overridable method gives implementers a hook to access data before</span>
<span class="c"> * it gets added to RecordSet and rendered to the TBODY.</span>
<span class="c"> *</span>
<span class="c"> * @method doBeforeLoadData</span>
<span class="c"> * @param sRequest {String} Original request.</span>
<span class="c"> * @param oResponse {Object} Response object.</span>
<span class="c"> * @param oPayload {MIXED} additional arguments</span>
<span class="c"> * @return {Boolean} Return true to continue loading data into RecordSet and</span>
<span class="c"> * updating DataTable with new Records, false to cancel.</span>
<span class="c"> */</span>
<span class="nx">doBeforeLoadData</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">sRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c">//</span>
<span class="c">// Public Custom Event Handlers</span>
<span class="c">//</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to sort Column.</span>
<span class="c"> *</span>
<span class="c"> * @method onEventSortColumn</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> */</span>
<span class="nx">onEventSortColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: support form elements in sortable columns</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">evt</span> <span class="o">=</span> <span class="nx">oArgs</span><span class="o">.</span><span class="nx">event</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">target</span> <span class="o">=</span> <span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">el</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getThEl</span><span class="o">(</span><span class="nx">target</span><span class="o">)</span> <span class="o">||</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">target</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">el</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">el</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">.</span><span class="nx">sortable</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">stopEvent</span><span class="o">(</span><span class="nx">evt</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">sortColumn</span><span class="o">(</span><span class="nx">oColumn</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not find Column for &quot;</span> <span class="o">+</span> <span class="nx">target</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to select Column.</span>
<span class="c"> *</span>
<span class="c"> * @method onEventSelectColumn</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> */</span>
<span class="nx">onEventSelectColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectColumn</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to highlight Column. Accounts for spurious</span>
<span class="c"> * caused-by-child events. </span>
<span class="c"> *</span>
<span class="c"> * @method onEventHighlightColumn</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> */</span>
<span class="nx">onEventHighlightColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: filter for all spurious events at a lower level</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">isAncestor</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">,</span><span class="nx">Ev</span><span class="o">.</span><span class="nx">getRelatedTarget</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">event</span><span class="o">)))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">highlightColumn</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to unhighlight Column. Accounts for spurious</span>
<span class="c"> * caused-by-child events. </span>
<span class="c"> *</span>
<span class="c"> * @method onEventUnhighlightColumn</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> */</span>
<span class="nx">onEventUnhighlightColumn</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: filter for all spurious events at a lower level</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">isAncestor</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">,</span><span class="nx">Ev</span><span class="o">.</span><span class="nx">getRelatedTarget</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">event</span><span class="o">)))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unhighlightColumn</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to manage selection according to desktop paradigm.</span>
<span class="c"> *</span>
<span class="c"> * @method onEventSelectRow</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> */</span>
<span class="nx">onEventSelectRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">sMode</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;selectionMode&quot;</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;single&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_handleSingleSelectionByMouse</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_handleStandardSelectionByMouse</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to select cell.</span>
<span class="c"> *</span>
<span class="c"> * @method onEventSelectCell</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> */</span>
<span class="nx">onEventSelectCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">sMode</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;selectionMode&quot;</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;cellblock&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_handleCellBlockSelectionByMouse</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">sMode</span> <span class="o">==</span> <span class="s2">&quot;cellrange&quot;</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_handleCellRangeSelectionByMouse</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_handleSingleCellSelectionByMouse</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to highlight row. Accounts for spurious</span>
<span class="c"> * caused-by-child events. </span>
<span class="c"> *</span>
<span class="c"> * @method onEventHighlightRow</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> */</span>
<span class="nx">onEventHighlightRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: filter for all spurious events at a lower level</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">isAncestor</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">,</span><span class="nx">Ev</span><span class="o">.</span><span class="nx">getRelatedTarget</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">event</span><span class="o">)))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">highlightRow</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to unhighlight row. Accounts for spurious</span>
<span class="c"> * caused-by-child events. </span>
<span class="c"> *</span>
<span class="c"> * @method onEventUnhighlightRow</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> */</span>
<span class="nx">onEventUnhighlightRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: filter for all spurious events at a lower level</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">isAncestor</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">,</span><span class="nx">Ev</span><span class="o">.</span><span class="nx">getRelatedTarget</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">event</span><span class="o">)))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unhighlightRow</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to highlight cell. Accounts for spurious</span>
<span class="c"> * caused-by-child events. </span>
<span class="c"> *</span>
<span class="c"> * @method onEventHighlightCell</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> */</span>
<span class="nx">onEventHighlightCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: filter for all spurious events at a lower level</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">isAncestor</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">,</span><span class="nx">Ev</span><span class="o">.</span><span class="nx">getRelatedTarget</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">event</span><span class="o">)))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">highlightCell</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to unhighlight cell. Accounts for spurious</span>
<span class="c"> * caused-by-child events. </span>
<span class="c"> *</span>
<span class="c"> * @method onEventUnhighlightCell</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> */</span>
<span class="nx">onEventUnhighlightCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="c">//TODO: filter for all spurious events at a lower level</span>
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">Dom</span><span class="o">.</span><span class="nx">isAncestor</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">,</span><span class="nx">Ev</span><span class="o">.</span><span class="nx">getRelatedTarget</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">event</span><span class="o">)))</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">unhighlightCell</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to format cell.</span>
<span class="c"> *</span>
<span class="c"> * @method onEventFormatCell</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> */</span>
<span class="nx">onEventFormatCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">target</span> <span class="o">=</span> <span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">;</span>
<span class="k">var</span> <span class="nx">elCell</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">target</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">elCell</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oColumn</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getColumn</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">cellIndex</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="nx">formatCell</span><span class="o">(</span><span class="nx">elCell</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">getRecord</span><span class="o">(</span><span class="nx">elCell</span><span class="o">),</span> <span class="nx">oColumn</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Could not format cell &quot;</span> <span class="o">+</span> <span class="nx">target</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to edit cell.</span>
<span class="c"> *</span>
<span class="c"> * @method onEventShowCellEditor</span>
<span class="c"> * @param oArgs.event {HTMLEvent} Event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} Target element.</span>
<span class="c"> */</span>
<span class="nx">onEventShowCellEditor</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">showCellEditor</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">.</span><span class="nx">target</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to save active CellEditor input.</span>
<span class="c"> *</span>
<span class="c"> * @method onEventSaveCellEditor</span>
<span class="c"> */</span>
<span class="nx">onEventSaveCellEditor</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">save</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">save</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">saveCellEditor</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Overridable custom event handler to cancel active CellEditor.</span>
<span class="c"> *</span>
<span class="c"> * @method onEventCancelCellEditor</span>
<span class="c"> */</span>
<span class="nx">onEventCancelCellEditor</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">cancel</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">cancel</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">cancelCellEditor</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Callback function receives data from DataSource and populates an entire</span>
<span class="c"> * DataTable with Records and TR elements, clearing previous Records, if any.</span>
<span class="c"> *</span>
<span class="c"> * @method onDataReturnInitializeTable</span>
<span class="c"> * @param sRequest {String} Original request.</span>
<span class="c"> * @param oResponse {Object} Response object.</span>
<span class="c"> * @param oPayload {MIXED} (optional) Additional argument(s)</span>
<span class="c"> */</span>
<span class="nx">onDataReturnInitializeTable</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">sRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">initializeTable</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="nx">onDataReturnSetRows</span><span class="o">(</span><span class="nx">sRequest</span><span class="o">,</span><span class="nx">oResponse</span><span class="o">,</span><span class="nx">oPayload</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Callback function receives reponse from DataSource, replaces all existing</span>
<span class="c"> * Records in RecordSet, updates TR elements with new data, and updates state</span>
<span class="c"> * UI for pagination and sorting from payload data, if necessary. </span>
<span class="c"> * </span>
<span class="c"> * @method onDataReturnReplaceRows</span>
<span class="c"> * @param oRequest {MIXED} Original generated request.</span>
<span class="c"> * @param oResponse {Object} Response object.</span>
<span class="c"> * @param oPayload {MIXED} (optional) Additional argument(s)</span>
<span class="c"> */</span>
<span class="nx">onDataReturnReplaceRows</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;dataReturnEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">request</span><span class="o">:</span><span class="nx">oRequest</span><span class="o">,</span><span class="nx">response</span><span class="o">:</span><span class="nx">oResponse</span><span class="o">,</span><span class="nx">payload</span><span class="o">:</span><span class="nx">oPayload</span><span class="o">});</span>
<span class="c">// Pass data through abstract method for any transformations</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">ok</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeLoadData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">),</span>
<span class="nx">pag</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">),</span>
<span class="nx">index</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
<span class="c">// Data ok to set</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">ok</span> <span class="o">&amp;&amp;</span> <span class="nx">oResponse</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">error</span> <span class="o">&amp;&amp;</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isArray</span><span class="o">(</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">results</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Update Records</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">reset</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;dynamicData&#39;</span><span class="o">))</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oPayload</span> <span class="o">&amp;&amp;</span> <span class="nx">oPayload</span><span class="o">.</span><span class="nx">pagination</span> <span class="o">&amp;&amp;</span>
<span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">oPayload</span><span class="o">.</span><span class="nx">pagination</span><span class="o">.</span><span class="nx">recordOffset</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">index</span> <span class="o">=</span> <span class="nx">oPayload</span><span class="o">.</span><span class="nx">pagination</span><span class="o">.</span><span class="nx">recordOffset</span><span class="o">;</span>
<span class="o">}</span> <span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="nx">pag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">index</span> <span class="o">=</span> <span class="nx">pag</span><span class="o">.</span><span class="nx">getStartIndex</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">setRecords</span><span class="o">(</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">results</span><span class="o">,</span> <span class="nx">index</span> <span class="o">|</span> <span class="m">0</span><span class="o">);</span>
<span class="c">// Update state</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_handleDataReturnPayload</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">);</span>
<span class="c">// Update UI</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">render</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">// Error</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">ok</span> <span class="o">&amp;&amp;</span> <span class="nx">oResponse</span><span class="o">.</span><span class="nx">error</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">showTableMessage</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;MSG_ERROR&quot;</span><span class="o">),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ERROR</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Callback function receives data from DataSource and appends to an existing</span>
<span class="c"> * DataTable new Records and, if applicable, creates or updates</span>
<span class="c"> * corresponding TR elements.</span>
<span class="c"> *</span>
<span class="c"> * @method onDataReturnAppendRows</span>
<span class="c"> * @param sRequest {String} Original request.</span>
<span class="c"> * @param oResponse {Object} Response object.</span>
<span class="c"> * @param oPayload {MIXED} (optional) Additional argument(s)</span>
<span class="c"> */</span>
<span class="nx">onDataReturnAppendRows</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">sRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;dataReturnEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">request</span><span class="o">:</span><span class="nx">sRequest</span><span class="o">,</span><span class="nx">response</span><span class="o">:</span><span class="nx">oResponse</span><span class="o">,</span><span class="nx">payload</span><span class="o">:</span><span class="nx">oPayload</span><span class="o">});</span>
<span class="c">// Pass data through abstract method for any transformations</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">ok</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeLoadData</span><span class="o">(</span><span class="nx">sRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">);</span>
<span class="c">// Data ok to append</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">ok</span> <span class="o">&amp;&amp;</span> <span class="nx">oResponse</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">error</span> <span class="o">&amp;&amp;</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isArray</span><span class="o">(</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">results</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Append rows</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">addRows</span><span class="o">(</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">results</span><span class="o">);</span>
<span class="c">// Update state</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_handleDataReturnPayload</span><span class="o">(</span><span class="nx">sRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Error</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">ok</span> <span class="o">&amp;&amp;</span> <span class="nx">oResponse</span><span class="o">.</span><span class="nx">error</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">showTableMessage</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;MSG_ERROR&quot;</span><span class="o">),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ERROR</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Callback function receives data from DataSource and inserts new records</span>
<span class="c"> * starting at the index specified in oPayload.insertIndex. The value for</span>
<span class="c"> * oPayload.insertIndex can be populated when sending the request to the DataSource,</span>
<span class="c"> * or by accessing oPayload.insertIndex with the doBeforeLoadData() method at runtime.</span>
<span class="c"> * If applicable, creates or updates corresponding TR elements.</span>
<span class="c"> *</span>
<span class="c"> * @method onDataReturnInsertRows</span>
<span class="c"> * @param sRequest {String} Original request.</span>
<span class="c"> * @param oResponse {Object} Response object.</span>
<span class="c"> * @param oPayload {MIXED} Argument payload, looks in oPayload.insertIndex.</span>
<span class="c"> */</span>
<span class="nx">onDataReturnInsertRows</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">sRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;dataReturnEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">request</span><span class="o">:</span><span class="nx">sRequest</span><span class="o">,</span><span class="nx">response</span><span class="o">:</span><span class="nx">oResponse</span><span class="o">,</span><span class="nx">payload</span><span class="o">:</span><span class="nx">oPayload</span><span class="o">});</span>
<span class="c">// Pass data through abstract method for any transformations</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">ok</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeLoadData</span><span class="o">(</span><span class="nx">sRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">);</span>
<span class="c">// Data ok to append</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">ok</span> <span class="o">&amp;&amp;</span> <span class="nx">oResponse</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">error</span> <span class="o">&amp;&amp;</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isArray</span><span class="o">(</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">results</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Insert rows</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">addRows</span><span class="o">(</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">results</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">.</span><span class="nx">insertIndex</span> <span class="o">|</span> <span class="m">0</span><span class="o">);</span>
<span class="c">// Update state</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_handleDataReturnPayload</span><span class="o">(</span><span class="nx">sRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Error</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">ok</span> <span class="o">&amp;&amp;</span> <span class="nx">oResponse</span><span class="o">.</span><span class="nx">error</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">showTableMessage</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;MSG_ERROR&quot;</span><span class="o">),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ERROR</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Callback function receives reponse from DataSource and populates the</span>
<span class="c"> * RecordSet with the results.</span>
<span class="c"> * </span>
<span class="c"> * @method onDataReturnSetRows</span>
<span class="c"> * @param oRequest {MIXED} Original generated request.</span>
<span class="c"> * @param oResponse {Object} Response object.</span>
<span class="c"> * @param oPayload {MIXED} (optional) Additional argument(s)</span>
<span class="c"> */</span>
<span class="nx">onDataReturnSetRows</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span><span class="o">((</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">DT</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_sId</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">fireEvent</span><span class="o">(</span><span class="s2">&quot;dataReturnEvent&quot;</span><span class="o">,</span> <span class="o">{</span><span class="nx">request</span><span class="o">:</span><span class="nx">oRequest</span><span class="o">,</span><span class="nx">response</span><span class="o">:</span><span class="nx">oResponse</span><span class="o">,</span><span class="nx">payload</span><span class="o">:</span><span class="nx">oPayload</span><span class="o">});</span>
<span class="c">// Pass data through abstract method for any transformations</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">ok</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeLoadData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">),</span>
<span class="nx">pag</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">),</span>
<span class="nx">index</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
<span class="c">// Data ok to set</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">ok</span> <span class="o">&amp;&amp;</span> <span class="nx">oResponse</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">error</span> <span class="o">&amp;&amp;</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isArray</span><span class="o">(</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">results</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// Update Records</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;dynamicData&#39;</span><span class="o">))</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oPayload</span> <span class="o">&amp;&amp;</span> <span class="nx">oPayload</span><span class="o">.</span><span class="nx">pagination</span> <span class="o">&amp;&amp;</span>
<span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">oPayload</span><span class="o">.</span><span class="nx">pagination</span><span class="o">.</span><span class="nx">recordOffset</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">index</span> <span class="o">=</span> <span class="nx">oPayload</span><span class="o">.</span><span class="nx">pagination</span><span class="o">.</span><span class="nx">recordOffset</span><span class="o">;</span>
<span class="o">}</span> <span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="nx">pag</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">index</span> <span class="o">=</span> <span class="nx">pag</span><span class="o">.</span><span class="nx">getStartIndex</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">setRecords</span><span class="o">(</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">results</span><span class="o">,</span> <span class="nx">index</span> <span class="o">|</span> <span class="m">0</span><span class="o">);</span>
<span class="c">// Update state</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_handleDataReturnPayload</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">);</span>
<span class="c">// Update UI</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">render</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">// Error</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">ok</span> <span class="o">&amp;&amp;</span> <span class="nx">oResponse</span><span class="o">.</span><span class="nx">error</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">showTableMessage</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;MSG_ERROR&quot;</span><span class="o">),</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_ERROR</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Instance destroyed before data returned.&quot;</span><span class="o">,</span><span class="s2">&quot;info&quot;</span><span class="o">,</span><span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Hook to update oPayload before consumption.</span>
<span class="c"> * </span>
<span class="c"> * @method handleDataReturnPayload</span>
<span class="c"> * @param oRequest {MIXED} Original generated request.</span>
<span class="c"> * @param oResponse {Object} Response object.</span>
<span class="c"> * @param oPayload {MIXED} State values.</span>
<span class="c"> * @return oPayload {MIXED} State values.</span>
<span class="c"> */</span>
<span class="nx">handleDataReturnPayload</span> <span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">oPayload</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Updates the DataTable with state data sent in an onDataReturn* payload.</span>
<span class="c"> * </span>
<span class="c"> * @method handleDataReturnPayload</span>
<span class="c"> * @param oRequest {MIXED} Original generated request.</span>
<span class="c"> * @param oResponse {Object} Response object.</span>
<span class="c"> * @param oPayload {MIXED} State values</span>
<span class="c"> */</span>
<span class="nx">_handleDataReturnPayload</span> <span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oPayload</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">handleDataReturnPayload</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oResponse</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">);</span>
<span class="k">if</span><span class="o">(</span><span class="nx">oPayload</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Update pagination</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">oPaginator</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s1">&#39;paginator&#39;</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oPaginator</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Update totalRecords</span>
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;dynamicData&quot;</span><span class="o">))</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">oPayload</span><span class="o">.</span><span class="nx">totalRecords</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oPaginator</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;totalRecords&#39;</span><span class="o">,</span><span class="nx">oPayload</span><span class="o">.</span><span class="nx">totalRecords</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">oPaginator</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;totalRecords&#39;</span><span class="o">,</span><span class="k">this</span><span class="o">.</span><span class="nx">_oRecordSet</span><span class="o">.</span><span class="nx">getLength</span><span class="o">());</span>
<span class="o">}</span>
<span class="c">// Update other paginator values</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isObject</span><span class="o">(</span><span class="nx">oPayload</span><span class="o">.</span><span class="nx">pagination</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oPaginator</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;rowsPerPage&#39;</span><span class="o">,</span><span class="nx">oPayload</span><span class="o">.</span><span class="nx">pagination</span><span class="o">.</span><span class="nx">rowsPerPage</span><span class="o">);</span>
<span class="nx">oPaginator</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;recordOffset&#39;</span><span class="o">,</span><span class="nx">oPayload</span><span class="o">.</span><span class="nx">pagination</span><span class="o">.</span><span class="nx">recordOffset</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="c">// Update sorting</span>
<span class="c"></span> <span class="k">if</span> <span class="o">(</span><span class="nx">oPayload</span><span class="o">.</span><span class="nx">sortedBy</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Set the sorting values in preparation for refresh</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;sortedBy&#39;</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">.</span><span class="nx">sortedBy</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Backwards compatibility for sorting</span>
<span class="c"></span> <span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="nx">oPayload</span><span class="o">.</span><span class="nx">sorting</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Set the sorting values in preparation for refresh</span>
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s1">&#39;sortedBy&#39;</span><span class="o">,</span> <span class="nx">oPayload</span><span class="o">.</span><span class="nx">sorting</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span> <span class="c">//</span>
<span class="c"></span> <span class="c">// Custom Events</span>
<span class="c"></span> <span class="c">//</span>
<span class="c"></span> <span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable&#39;s rows are rendered from an initialized state.</span>
<span class="c"> *</span>
<span class="c"> * @event initEvent</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable&#39;s DOM is rendered or modified.</span>
<span class="c"> *</span>
<span class="c"> * @event renderEvent</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable&#39;s post-render routine is complete, including</span>
<span class="c"> * Column width validations.</span>
<span class="c"> *</span>
<span class="c"> * @event postRenderEvent</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable is disabled.</span>
<span class="c"> *</span>
<span class="c"> * @event disableEvent</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable is undisabled.</span>
<span class="c"> *</span>
<span class="c"> * @event undisableEvent</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when data is returned from DataSource but before it is consumed by</span>
<span class="c"> * DataTable.</span>
<span class="c"> *</span>
<span class="c"> * @event dataReturnEvent</span>
<span class="c"> * @param oArgs.request {String} Original request.</span>
<span class="c"> * @param oArgs.response {Object} Response object.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable has a focus event.</span>
<span class="c"> *</span>
<span class="c"> * @event tableFocusEvent</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable THEAD element has a focus event.</span>
<span class="c"> *</span>
<span class="c"> * @event theadFocusEvent</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable TBODY element has a focus event.</span>
<span class="c"> *</span>
<span class="c"> * @event tbodyFocusEvent</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable has a blur event.</span>
<span class="c"> *</span>
<span class="c"> * @event tableBlurEvent</span>
<span class="c"> */</span>
<span class="c">/*TODO implement theadBlurEvent</span>
<span class="c"> * Fired when the DataTable THEAD element has a blur event.</span>
<span class="c"> *</span>
<span class="c"> * @event theadBlurEvent</span>
<span class="c"> */</span>
<span class="c">/*TODO: implement tbodyBlurEvent</span>
<span class="c"> * Fired when the DataTable TBODY element has a blur event.</span>
<span class="c"> *</span>
<span class="c"> * @event tbodyBlurEvent</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable has a key event.</span>
<span class="c"> *</span>
<span class="c"> * @event tableKeyEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The DataTable&#39;s TABLE element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable THEAD element has a key event.</span>
<span class="c"> *</span>
<span class="c"> * @event theadKeyEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The DataTable&#39;s TABLE element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable TBODY element has a key event.</span>
<span class="c"> *</span>
<span class="c"> * @event tbodyKeyEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The DataTable&#39;s TABLE element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable has a mouseover.</span>
<span class="c"> *</span>
<span class="c"> * @event tableMouseoverEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The DataTable&#39;s TABLE element.</span>
<span class="c"> *</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable has a mouseout.</span>
<span class="c"> *</span>
<span class="c"> * @event tableMouseoutEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The DataTable&#39;s TABLE element.</span>
<span class="c"> *</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable has a mousedown.</span>
<span class="c"> *</span>
<span class="c"> * @event tableMousedownEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The DataTable&#39;s TABLE element.</span>
<span class="c"> *</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable has a mouseup.</span>
<span class="c"> *</span>
<span class="c"> * @event tableMouseupEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The DataTable&#39;s TABLE element.</span>
<span class="c"> *</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable has a click.</span>
<span class="c"> *</span>
<span class="c"> * @event tableClickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The DataTable&#39;s TABLE element.</span>
<span class="c"> *</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable has a dblclick.</span>
<span class="c"> *</span>
<span class="c"> * @event tableDblclickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The DataTable&#39;s TABLE element.</span>
<span class="c"> *</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a message is shown in the DataTable&#39;s message element.</span>
<span class="c"> *</span>
<span class="c"> * @event tableMsgShowEvent</span>
<span class="c"> * @param oArgs.html {String} The HTML displayed.</span>
<span class="c"> * @param oArgs.className {String} The className assigned.</span>
<span class="c"> *</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when the DataTable&#39;s message element is hidden.</span>
<span class="c"> *</span>
<span class="c"> * @event tableMsgHideEvent</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD row has a mouseover.</span>
<span class="c"> *</span>
<span class="c"> * @event theadRowMouseoverEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TR element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD row has a mouseout.</span>
<span class="c"> *</span>
<span class="c"> * @event theadRowMouseoutEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TR element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD row has a mousedown.</span>
<span class="c"> *</span>
<span class="c"> * @event theadRowMousedownEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TR element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD row has a mouseup.</span>
<span class="c"> *</span>
<span class="c"> * @event theadRowMouseupEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TR element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD row has a click.</span>
<span class="c"> *</span>
<span class="c"> * @event theadRowClickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TR element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD row has a dblclick.</span>
<span class="c"> *</span>
<span class="c"> * @event theadRowDblclickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TR element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD cell has a mouseover.</span>
<span class="c"> *</span>
<span class="c"> * @event theadCellMouseoverEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TH element.</span>
<span class="c"> *</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD cell has a mouseout.</span>
<span class="c"> *</span>
<span class="c"> * @event theadCellMouseoutEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TH element.</span>
<span class="c"> *</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD cell has a mousedown.</span>
<span class="c"> *</span>
<span class="c"> * @event theadCellMousedownEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TH element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD cell has a mouseup.</span>
<span class="c"> *</span>
<span class="c"> * @event theadCellMouseupEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TH element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD cell has a click.</span>
<span class="c"> *</span>
<span class="c"> * @event theadCellClickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TH element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD cell has a dblclick.</span>
<span class="c"> *</span>
<span class="c"> * @event theadCellDblclickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TH element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD label has a mouseover.</span>
<span class="c"> *</span>
<span class="c"> * @event theadLabelMouseoverEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The SPAN element.</span>
<span class="c"> *</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD label has a mouseout.</span>
<span class="c"> *</span>
<span class="c"> * @event theadLabelMouseoutEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The SPAN element.</span>
<span class="c"> *</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD label has a mousedown.</span>
<span class="c"> *</span>
<span class="c"> * @event theadLabelMousedownEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The SPAN element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD label has a mouseup.</span>
<span class="c"> *</span>
<span class="c"> * @event theadLabelMouseupEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The SPAN element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD label has a click.</span>
<span class="c"> *</span>
<span class="c"> * @event theadLabelClickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The SPAN element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a THEAD label has a dblclick.</span>
<span class="c"> *</span>
<span class="c"> * @event theadLabelDblclickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The SPAN element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a column is sorted.</span>
<span class="c"> *</span>
<span class="c"> * @event columnSortEvent</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The Column instance.</span>
<span class="c"> * @param oArgs.dir {String} Sort direction: YAHOO.widget.DataTable.CLASS_ASC</span>
<span class="c"> * or YAHOO.widget.DataTable.CLASS_DESC.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a column width is set.</span>
<span class="c"> *</span>
<span class="c"> * @event columnSetWidthEvent</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The Column instance.</span>
<span class="c"> * @param oArgs.width {Number} The width in pixels.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a column width is unset.</span>
<span class="c"> *</span>
<span class="c"> * @event columnUnsetWidthEvent</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The Column instance.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a column is drag-resized.</span>
<span class="c"> *</span>
<span class="c"> * @event columnResizeEvent</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The Column instance.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TH element.</span>
<span class="c"> * @param oArgs.width {Number} Width in pixels. </span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a Column is moved to a new index.</span>
<span class="c"> *</span>
<span class="c"> * @event columnReorderEvent</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The Column instance.</span>
<span class="c"> * @param oArgs.oldIndex {Number} The previous index position.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a column is hidden.</span>
<span class="c"> *</span>
<span class="c"> * @event columnHideEvent</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The Column instance.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a column is shown.</span>
<span class="c"> *</span>
<span class="c"> * @event columnShowEvent</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The Column instance.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a column is selected.</span>
<span class="c"> *</span>
<span class="c"> * @event columnSelectEvent</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The Column instance.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a column is unselected.</span>
<span class="c"> *</span>
<span class="c"> * @event columnUnselectEvent</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The Column instance.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a column is removed.</span>
<span class="c"> *</span>
<span class="c"> * @event columnRemoveEvent</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The Column instance.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a column is inserted.</span>
<span class="c"> *</span>
<span class="c"> * @event columnInsertEvent</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The Column instance.</span>
<span class="c"> * @param oArgs.index {Number} The index position.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a column is highlighted.</span>
<span class="c"> *</span>
<span class="c"> * @event columnHighlightEvent</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The highlighted Column.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a column is unhighlighted.</span>
<span class="c"> *</span>
<span class="c"> * @event columnUnhighlightEvent</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The unhighlighted Column.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a row has a mouseover.</span>
<span class="c"> *</span>
<span class="c"> * @event rowMouseoverEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TR element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a row has a mouseout.</span>
<span class="c"> *</span>
<span class="c"> * @event rowMouseoutEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TR element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a row has a mousedown.</span>
<span class="c"> *</span>
<span class="c"> * @event rowMousedownEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TR element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a row has a mouseup.</span>
<span class="c"> *</span>
<span class="c"> * @event rowMouseupEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TR element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a row has a click.</span>
<span class="c"> *</span>
<span class="c"> * @event rowClickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TR element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a row has a dblclick.</span>
<span class="c"> *</span>
<span class="c"> * @event rowDblclickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TR element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a row is added.</span>
<span class="c"> *</span>
<span class="c"> * @event rowAddEvent</span>
<span class="c"> * @param oArgs.record {YAHOO.widget.Record} The added Record.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when rows are added.</span>
<span class="c"> *</span>
<span class="c"> * @event rowsAddEvent</span>
<span class="c"> * @param oArgs.record {YAHOO.widget.Record[]} The added Records.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a row is updated.</span>
<span class="c"> *</span>
<span class="c"> * @event rowUpdateEvent</span>
<span class="c"> * @param oArgs.record {YAHOO.widget.Record} The updated Record.</span>
<span class="c"> * @param oArgs.oldData {Object} Object literal of the old data.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a row is deleted.</span>
<span class="c"> *</span>
<span class="c"> * @event rowDeleteEvent</span>
<span class="c"> * @param oArgs.oldData {Object} Object literal of the deleted data.</span>
<span class="c"> * @param oArgs.recordIndex {Number} Index of the deleted Record.</span>
<span class="c"> * @param oArgs.trElIndex {Number} Index of the deleted TR element, if on current page.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when rows are deleted.</span>
<span class="c"> *</span>
<span class="c"> * @event rowsDeleteEvent</span>
<span class="c"> * @param oArgs.oldData {Object[]} Array of object literals of the deleted data.</span>
<span class="c"> * @param oArgs.recordIndex {Number} Index of the first deleted Record.</span>
<span class="c"> * @param oArgs.count {Number} Number of deleted Records.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a row is selected.</span>
<span class="c"> *</span>
<span class="c"> * @event rowSelectEvent</span>
<span class="c"> * @param oArgs.el {HTMLElement} The selected TR element, if applicable.</span>
<span class="c"> * @param oArgs.record {YAHOO.widget.Record} The selected Record.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a row is unselected.</span>
<span class="c"> *</span>
<span class="c"> * @event rowUnselectEvent</span>
<span class="c"> * @param oArgs.el {HTMLElement} The unselected TR element, if applicable.</span>
<span class="c"> * @param oArgs.record {YAHOO.widget.Record} The unselected Record.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when all row selections are cleared.</span>
<span class="c"> *</span>
<span class="c"> * @event unselectAllRowsEvent</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a row is highlighted.</span>
<span class="c"> *</span>
<span class="c"> * @event rowHighlightEvent</span>
<span class="c"> * @param oArgs.el {HTMLElement} The highlighted TR element.</span>
<span class="c"> * @param oArgs.record {YAHOO.widget.Record} The highlighted Record.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a row is unhighlighted.</span>
<span class="c"> *</span>
<span class="c"> * @event rowUnhighlightEvent</span>
<span class="c"> * @param oArgs.el {HTMLElement} The highlighted TR element.</span>
<span class="c"> * @param oArgs.record {YAHOO.widget.Record} The highlighted Record.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a cell is updated.</span>
<span class="c"> *</span>
<span class="c"> * @event cellUpdateEvent</span>
<span class="c"> * @param oArgs.record {YAHOO.widget.Record} The updated Record.</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The updated Column.</span>
<span class="c"> * @param oArgs.oldData {Object} Object literal of the old data.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a cell has a mouseover.</span>
<span class="c"> *</span>
<span class="c"> * @event cellMouseoverEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TD element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a cell has a mouseout.</span>
<span class="c"> *</span>
<span class="c"> * @event cellMouseoutEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TD element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a cell has a mousedown.</span>
<span class="c"> *</span>
<span class="c"> * @event cellMousedownEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TD element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a cell has a mouseup.</span>
<span class="c"> *</span>
<span class="c"> * @event cellMouseupEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TD element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a cell has a click.</span>
<span class="c"> *</span>
<span class="c"> * @event cellClickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TD element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a cell has a dblclick.</span>
<span class="c"> *</span>
<span class="c"> * @event cellDblclickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The TD element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a cell is formatted.</span>
<span class="c"> *</span>
<span class="c"> * @event cellFormatEvent</span>
<span class="c"> * @param oArgs.el {HTMLElement} The formatted TD element.</span>
<span class="c"> * @param oArgs.record {YAHOO.widget.Record} The associated Record instance.</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The associated Column instance.</span>
<span class="c"> * @param oArgs.key {String} (deprecated) The key of the formatted cell.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a cell is selected.</span>
<span class="c"> *</span>
<span class="c"> * @event cellSelectEvent</span>
<span class="c"> * @param oArgs.el {HTMLElement} The selected TD element.</span>
<span class="c"> * @param oArgs.record {YAHOO.widget.Record} The associated Record instance.</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The associated Column instance.</span>
<span class="c"> * @param oArgs.key {String} (deprecated) The key of the selected cell.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a cell is unselected.</span>
<span class="c"> *</span>
<span class="c"> * @event cellUnselectEvent</span>
<span class="c"> * @param oArgs.el {HTMLElement} The unselected TD element.</span>
<span class="c"> * @param oArgs.record {YAHOO.widget.Record} The associated Record.</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The associated Column instance.</span>
<span class="c"> * @param oArgs.key {String} (deprecated) The key of the unselected cell.</span>
<span class="c"></span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a cell is highlighted.</span>
<span class="c"> *</span>
<span class="c"> * @event cellHighlightEvent</span>
<span class="c"> * @param oArgs.el {HTMLElement} The highlighted TD element.</span>
<span class="c"> * @param oArgs.record {YAHOO.widget.Record} The associated Record instance.</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The associated Column instance.</span>
<span class="c"> * @param oArgs.key {String} (deprecated) The key of the highlighted cell.</span>
<span class="c"></span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a cell is unhighlighted.</span>
<span class="c"> *</span>
<span class="c"> * @event cellUnhighlightEvent</span>
<span class="c"> * @param oArgs.el {HTMLElement} The unhighlighted TD element.</span>
<span class="c"> * @param oArgs.record {YAHOO.widget.Record} The associated Record instance.</span>
<span class="c"> * @param oArgs.column {YAHOO.widget.Column} The associated Column instance.</span>
<span class="c"> * @param oArgs.key {String} (deprecated) The key of the unhighlighted cell.</span>
<span class="c"></span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when all cell selections are cleared.</span>
<span class="c"> *</span>
<span class="c"> * @event unselectAllCellsEvent</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a CellEditor is shown.</span>
<span class="c"> *</span>
<span class="c"> * @event editorShowEvent</span>
<span class="c"> * @param oArgs.editor {YAHOO.widget.CellEditor} The CellEditor instance.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a CellEditor has a keydown.</span>
<span class="c"> *</span>
<span class="c"> * @event editorKeydownEvent</span>
<span class="c"> * @param oArgs.editor {YAHOO.widget.CellEditor} The CellEditor instance.</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a CellEditor input is reverted.</span>
<span class="c"> *</span>
<span class="c"> * @event editorRevertEvent</span>
<span class="c"> * @param oArgs.editor {YAHOO.widget.CellEditor} The CellEditor instance.</span>
<span class="c"> * @param oArgs.newData {Object} New data value from form input field.</span>
<span class="c"> * @param oArgs.oldData {Object} Old data value.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a CellEditor input is saved.</span>
<span class="c"> *</span>
<span class="c"> * @event editorSaveEvent</span>
<span class="c"> * @param oArgs.editor {YAHOO.widget.CellEditor} The CellEditor instance.</span>
<span class="c"> * @param oArgs.newData {Object} New data value from form input field.</span>
<span class="c"> * @param oArgs.oldData {Object} Old data value.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a CellEditor input is canceled.</span>
<span class="c"> *</span>
<span class="c"> * @event editorCancelEvent</span>
<span class="c"> * @param oArgs.editor {YAHOO.widget.CellEditor} The CellEditor instance.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a CellEditor has a blur event.</span>
<span class="c"> *</span>
<span class="c"> * @event editorBlurEvent</span>
<span class="c"> * @param oArgs.editor {YAHOO.widget.CellEditor} The CellEditor instance.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a CellEditor is blocked.</span>
<span class="c"> *</span>
<span class="c"> * @event editorBlockEvent</span>
<span class="c"> * @param oArgs.editor {YAHOO.widget.CellEditor} The CellEditor instance.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a CellEditor is unblocked.</span>
<span class="c"> *</span>
<span class="c"> * @event editorUnblockEvent</span>
<span class="c"> * @param oArgs.editor {YAHOO.widget.CellEditor} The CellEditor instance.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a link is clicked.</span>
<span class="c"> *</span>
<span class="c"> * @event linkClickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The A element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a BUTTON element is clicked.</span>
<span class="c"> *</span>
<span class="c"> * @event buttonClickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The BUTTON element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a CHECKBOX element is clicked.</span>
<span class="c"> *</span>
<span class="c"> * @event checkboxClickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The CHECKBOX element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a SELECT element is changed.</span>
<span class="c"> *</span>
<span class="c"> * @event dropdownChangeEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The SELECT element.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * Fired when a RADIO element is clicked.</span>
<span class="c"> *</span>
<span class="c"> * @event radioClickEvent</span>
<span class="c"> * @param oArgs.event {HTMLEvent} The event object.</span>
<span class="c"> * @param oArgs.target {HTMLElement} The RADIO element.</span>
<span class="c"> */</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c">//</span>
<span class="c">// Deprecated APIs</span>
<span class="c">//</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c"></span>
<span class="c">/*</span>
<span class="c"> * @method showCellEditorBtns</span>
<span class="c"> * @deprecated Use CellEditor.renderBtns() </span>
<span class="c"> */</span>
<span class="nx">showCellEditorBtns</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Buttons</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elBtnsDiv</span> <span class="o">=</span> <span class="nx">elContainer</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;div&quot;</span><span class="o">));</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elBtnsDiv</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_BUTTON</span><span class="o">);</span>
<span class="c">// Save button</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elSaveBtn</span> <span class="o">=</span> <span class="nx">elBtnsDiv</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;button&quot;</span><span class="o">));</span>
<span class="nx">Dom</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">elSaveBtn</span><span class="o">,</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">CLASS_DEFAULT</span><span class="o">);</span>
<span class="nx">elSaveBtn</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&quot;OK&quot;</span><span class="o">;</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elSaveBtn</span><span class="o">,</span> <span class="s2">&quot;click&quot;</span><span class="o">,</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">onEventSaveCellEditor</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">);</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">focusTbodyEl</span><span class="o">();</span>
<span class="o">},</span> <span class="k">this</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="c">// Cancel button</span>
<span class="c"></span> <span class="k">var</span> <span class="nx">elCancelBtn</span> <span class="o">=</span> <span class="nx">elBtnsDiv</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nb">document</span><span class="o">.</span><span class="nx">createElement</span><span class="o">(</span><span class="s2">&quot;button&quot;</span><span class="o">));</span>
<span class="nx">elCancelBtn</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&quot;Cancel&quot;</span><span class="o">;</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">addListener</span><span class="o">(</span><span class="nx">elCancelBtn</span><span class="o">,</span> <span class="s2">&quot;click&quot;</span><span class="o">,</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">onEventCancelCellEditor</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">,</span> <span class="nx">oSelf</span><span class="o">);</span>
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">focusTbodyEl</span><span class="o">();</span>
<span class="o">},</span> <span class="k">this</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;The method showCellEditorBtns() has been deprecated.&quot;</span> <span class="o">+</span>
<span class="s2">&quot; Please use the CellEditor class.&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method resetCellEditor</span>
<span class="c"> * @deprecated Use destroyCellEditor </span>
<span class="c"> */</span>
<span class="nx">resetCellEditor</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">elContainer</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">container</span><span class="o">;</span>
<span class="nx">elContainer</span><span class="o">.</span><span class="nx">style</span><span class="o">.</span><span class="nx">display</span> <span class="o">=</span> <span class="s2">&quot;none&quot;</span><span class="o">;</span>
<span class="nx">Ev</span><span class="o">.</span><span class="nx">purgeElement</span><span class="o">(</span><span class="nx">elContainer</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">elContainer</span><span class="o">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">value</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_oCellEditor</span><span class="o">.</span><span class="nx">isActive</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;The method resetCellEditor() has been deprecated.&quot;</span> <span class="o">+</span>
<span class="s2">&quot; Please use the CellEditor class.&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @event editorUpdateEvent</span>
<span class="c"> * @deprecated Use CellEditor class.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @method getBody</span>
<span class="c"> * @deprecated Use getTbodyEl().</span>
<span class="c"> */</span>
<span class="nx">getBody</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;The method getBody() has been deprecated&quot;</span> <span class="o">+</span>
<span class="s2">&quot; in favor of getTbodyEl()&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTbodyEl</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method getCell</span>
<span class="c"> * @deprecated Use getTdEl().</span>
<span class="c"> */</span>
<span class="nx">getCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">index</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;The method getCell() has been deprecated&quot;</span> <span class="o">+</span>
<span class="s2">&quot; in favor of getTdEl()&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTdEl</span><span class="o">(</span><span class="nx">index</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method getRow</span>
<span class="c"> * @deprecated Use getTrEl().</span>
<span class="c"> */</span>
<span class="nx">getRow</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">index</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;The method getRow() has been deprecated&quot;</span> <span class="o">+</span>
<span class="s2">&quot; in favor of getTrEl()&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">getTrEl</span><span class="o">(</span><span class="nx">index</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method refreshView</span>
<span class="c"> * @deprecated Use render.</span>
<span class="c"> */</span>
<span class="nx">refreshView</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;The method refreshView() has been deprecated&quot;</span> <span class="o">+</span>
<span class="s2">&quot; in favor of render()&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">this</span><span class="o">.</span><span class="nx">render</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method select</span>
<span class="c"> * @deprecated Use selectRow.</span>
<span class="c"> */</span>
<span class="nx">select</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">els</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;The method select() has been deprecated&quot;</span> <span class="o">+</span>
<span class="s2">&quot; in favor of selectRow()&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">if</span><span class="o">(!</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isArray</span><span class="o">(</span><span class="nx">els</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">els</span> <span class="o">=</span> <span class="o">[</span><span class="nx">els</span><span class="o">];</span>
<span class="o">}</span>
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="m">0</span><span class="o">;</span> <span class="nx">i</span><span class="o">&lt;</span><span class="nx">els</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">selectRow</span><span class="o">(</span><span class="nx">els</span><span class="o">[</span><span class="nx">i</span><span class="o">]);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method onEventEditCell</span>
<span class="c"> * @deprecated Use onEventShowCellEditor.</span>
<span class="c"> */</span>
<span class="nx">onEventEditCell</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;The method onEventEditCell() has been deprecated&quot;</span> <span class="o">+</span>
<span class="s2">&quot; in favor of onEventShowCellEditor()&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">this</span><span class="o">.</span><span class="nx">onEventShowCellEditor</span><span class="o">(</span><span class="nx">oArgs</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _syncColWidths</span>
<span class="c"> * @deprecated Use validateColumnWidths.</span>
<span class="c"> */</span>
<span class="nx">_syncColWidths</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
<span class="c">// Backward compatibility</span>
<span class="c"></span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;The method _syncColWidths() has been deprecated&quot;</span> <span class="o">+</span>
<span class="s2">&quot; in favor of validateColumnWidths()&quot;</span><span class="o">,</span> <span class="s2">&quot;warn&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
<span class="k">this</span><span class="o">.</span><span class="nx">validateColumnWidths</span><span class="o">();</span>
<span class="o">}</span>
<span class="c">/**</span>
<span class="c"> * @event headerRowMouseoverEvent</span>
<span class="c"> * @deprecated Use theadRowMouseoverEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerRowMouseoutEvent</span>
<span class="c"> * @deprecated Use theadRowMouseoutEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerRowMousedownEvent</span>
<span class="c"> * @deprecated Use theadRowMousedownEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerRowClickEvent</span>
<span class="c"> * @deprecated Use theadRowClickEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerRowDblclickEvent</span>
<span class="c"> * @deprecated Use theadRowDblclickEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerCellMouseoverEvent</span>
<span class="c"> * @deprecated Use theadCellMouseoverEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerCellMouseoutEvent</span>
<span class="c"> * @deprecated Use theadCellMouseoutEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerCellMousedownEvent</span>
<span class="c"> * @deprecated Use theadCellMousedownEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerCellClickEvent</span>
<span class="c"> * @deprecated Use theadCellClickEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerCellDblclickEvent</span>
<span class="c"> * @deprecated Use theadCellDblclickEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerLabelMouseoverEvent</span>
<span class="c"> * @deprecated Use theadLabelMouseoverEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerLabelMouseoutEvent</span>
<span class="c"> * @deprecated Use theadLabelMouseoutEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerLabelMousedownEvent</span>
<span class="c"> * @deprecated Use theadLabelMousedownEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerLabelClickEvent</span>
<span class="c"> * @deprecated Use theadLabelClickEvent.</span>
<span class="c"> */</span>
<span class="c">/**</span>
<span class="c"> * @event headerLabelDbllickEvent</span>
<span class="c"> * @deprecated Use theadLabelDblclickEvent.</span>
<span class="c"> */</span>
<span class="o">});</span>
<span class="c">/**</span>
<span class="c"> * Alias for onDataReturnSetRows for backward compatibility</span>
<span class="c"> * @method onDataReturnSetRecords</span>
<span class="c"> * @deprecated Use onDataReturnSetRows</span>
<span class="c"> */</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">onDataReturnSetRecords</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">onDataReturnSetRows</span><span class="o">;</span>
<span class="c">/**</span>
<span class="c"> * Alias for onPaginatorChange for backward compatibility</span>
<span class="c"> * @method onPaginatorChange</span>
<span class="c"> * @deprecated Use onPaginatorChangeRequest</span>
<span class="c"> */</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">onPaginatorChange</span> <span class="o">=</span> <span class="nx">DT</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">onPaginatorChangeRequest</span><span class="o">;</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c">//</span>
<span class="c">// Deprecated static APIs</span>
<span class="c">//</span>
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
<span class="c">/**</span>
<span class="c"> * @method DataTable.formatTheadCell</span>
<span class="c"> * @deprecated Use formatTheadCell.</span>
<span class="c"> */</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">formatTheadCell</span> <span class="o">=</span> <span class="k">function</span><span class="o">()</span> <span class="o">{};</span>
<span class="c">/**</span>
<span class="c"> * @method DataTable.editCheckbox</span>
<span class="c"> * @deprecated Use YAHOO.widget.CheckboxCellEditor.</span>
<span class="c"> */</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">editCheckbox</span> <span class="o">=</span> <span class="k">function</span><span class="o">()</span> <span class="o">{};</span>
<span class="c">/**</span>
<span class="c"> * @method DataTable.editDate</span>
<span class="c"> * @deprecated Use YAHOO.widget.DateCellEditor.</span>
<span class="c"> */</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">editDate</span> <span class="o">=</span> <span class="k">function</span><span class="o">()</span> <span class="o">{};</span>
<span class="c">/**</span>
<span class="c"> * @method DataTable.editDropdown</span>
<span class="c"> * @deprecated Use YAHOO.widget.DropdownCellEditor.</span>
<span class="c"> */</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">editDropdown</span> <span class="o">=</span> <span class="k">function</span><span class="o">()</span> <span class="o">{};</span>
<span class="c">/**</span>
<span class="c"> * @method DataTable.editRadio</span>
<span class="c"> * @deprecated Use YAHOO.widget.RadioCellEditor.</span>
<span class="c"> */</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">editRadio</span> <span class="o">=</span> <span class="k">function</span><span class="o">()</span> <span class="o">{};</span>
<span class="c">/**</span>
<span class="c"> * @method DataTable.editTextarea</span>
<span class="c"> * @deprecated Use YAHOO.widget.TextareaCellEditor</span>
<span class="c"> */</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">editTextarea</span> <span class="o">=</span> <span class="k">function</span><span class="o">()</span> <span class="o">{};</span>
<span class="c">/**</span>
<span class="c"> * @method DataTable.editTextbox</span>
<span class="c"> * @deprecated Use YAHOO.widget.TextboxCellEditor</span>
<span class="c"> */</span>
<span class="nx">DT</span><span class="o">.</span><span class="nx">editTextbox</span><span class="o">=</span> <span class="k">function</span><span class="o">()</span> <span class="o">{};</span>
<span class="o">})();</span>
</pre></div>
</div>
</div>
</div>
<div class="yui-b">
<div class="nav">
<div class="module">
<h4>Modules</h4>
<ul class="content">
<li class=""><a href="module_animation.html">animation</a></li>
<li class=""><a href="module_autocomplete.html">autocomplete</a></li>
<li class=""><a href="module_button.html">button</a></li>
<li class=""><a href="module_calendar.html">calendar</a></li>
<li class=""><a href="module_carousel.html">carousel</a></li>
<li class=""><a href="module_charts.html">charts</a></li>
<li class=""><a href="module_colorpicker.html">colorpicker</a></li>
<li class=""><a href="module_connection.html">connection</a></li>
<li class=""><a href="module_container.html">container</a></li>
<li class=""><a href="module_cookie.html">cookie</a></li>
<li class=""><a href="module_datasource.html">datasource</a></li>
<li class="selected"><a href="module_datatable.html">datatable</a></li>
<li class=""><a href="module_dom.html">dom</a></li>
<li class=""><a href="module_dragdrop.html">dragdrop</a></li>
<li class=""><a href="module_editor.html">editor</a></li>
<li class=""><a href="module_element.html">element</a></li>
<li class=""><a href="module_event.html">event</a></li>
<li class=""><a href="module_get.html">get</a></li>
<li class=""><a href="module_history.html">history</a></li>
<li class=""><a href="module_imagecropper.html">imagecropper</a></li>
<li class=""><a href="module_imageloader.html">imageloader</a></li>
<li class=""><a href="module_json.html">json</a></li>
<li class=""><a href="module_layout.html">layout</a></li>
<li class=""><a href="module_logger.html">logger</a></li>
<li class=""><a href="module_menu.html">menu</a></li>
<li class=""><a href="module_paginator.html">paginator</a></li>
<li class=""><a href="module_profiler.html">profiler</a></li>
<li class=""><a href="module_profilerviewer.html">profilerviewer</a></li>
<li class=""><a href="module_resize.html">resize</a></li>
<li class=""><a href="module_selector.html">selector</a></li>
<li class=""><a href="module_slider.html">slider</a></li>
<li class=""><a href="module_tabview.html">tabview</a></li>
<li class=""><a href="module_treeview.html">treeview</a></li>
<li class=""><a href="module_uploader.html">uploader</a></li>
<li class=""><a href="module_yahoo.html">yahoo</a></li>
<li class=""><a href="module_yuiloader.html">yuiloader</a></li>
<li class=""><a href="module_yuitest.html">yuitest</a></li>
</ul>
</div>
<div class="module">
<h4>Classes</h4>
<ul class="content">
<li class=""><a href="YAHOO.util.Chain.html">YAHOO.util.Chain</a></li>
<li class=""><a href="YAHOO.util.ColumnDD.html">YAHOO.util.ColumnDD</a></li>
<li class=""><a href="YAHOO.util.ColumnResizer.html">YAHOO.util.ColumnResizer</a></li>
<li class=""><a href="YAHOO.util.Sort.html">YAHOO.util.Sort</a></li>
<li class=""><a href="YAHOO.widget.BaseCellEditor.html">YAHOO.widget.BaseCellEditor</a></li>
<li class=""><a href="YAHOO.widget.CellEditor.html">YAHOO.widget.CellEditor</a></li>
<li class=""><a href="YAHOO.widget.CheckboxCellEditor.html">YAHOO.widget.CheckboxCellEditor</a></li>
<li class=""><a href="YAHOO.widget.Column.html">YAHOO.widget.Column</a></li>
<li class=""><a href="YAHOO.widget.ColumnSet.html">YAHOO.widget.ColumnSet</a></li>
<li class=""><a href="YAHOO.widget.DataTable.html">YAHOO.widget.DataTable</a></li>
<li class=""><a href="YAHOO.widget.DateCellEditor.html">YAHOO.widget.DateCellEditor</a></li>
<li class=""><a href="YAHOO.widget.DropdownCellEditor.html">YAHOO.widget.DropdownCellEditor</a></li>
<li class=""><a href="YAHOO.widget.RadioCellEditor.html">YAHOO.widget.RadioCellEditor</a></li>
<li class=""><a href="YAHOO.widget.Record.html">YAHOO.widget.Record</a></li>
<li class=""><a href="YAHOO.widget.RecordSet.html">YAHOO.widget.RecordSet</a></li>
<li class=""><a href="YAHOO.widget.ScrollingDataTable.html">YAHOO.widget.ScrollingDataTable</a></li>
<li class=""><a href="YAHOO.widget.TextareaCellEditor.html">YAHOO.widget.TextareaCellEditor</a></li>
<li class=""><a href="YAHOO.widget.TextboxCellEditor.html">YAHOO.widget.TextboxCellEditor</a></li>
</ul>
</div>
<div class="module">
<h4>Files</h4>
<ul class="content">
<li class=""><a href="CellEditor.js.html">CellEditor.js</a></li>
<li class=""><a href="Chain.js.html">Chain.js</a></li>
<li class=""><a href="ColumnSet.js.html">ColumnSet.js</a></li>
<li class="selected"><a href="DataTable.js.html">DataTable.js</a></li>
<li class=""><a href="RecordSet.js.html">RecordSet.js</a></li>
<li class=""><a href="ScrollingDataTable.js.html">ScrollingDataTable.js</a></li>
</ul>
</div>
</div>
</div>
</div>
<div id="ft">
<hr />
Copyright &copy; 2008 Yahoo! Inc. All rights reserved.
</div>
</div>
</body>
</html>