2007 lines
244 KiB
HTML
2007 lines
244 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
|
<html>
|
|
<head>
|
|
<title>API: datasource DataSource.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>DataSource Utility <span class="subtitle">2.5.1</span></h3>
|
|
<p>
|
|
<a href="./index.html">Yahoo! UI Library</a>
|
|
> <a href="./module_datasource.html">datasource</a>
|
|
|
|
> DataSource.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" /> Show Private</span>
|
|
<span id="classopts"><input type="checkbox" name="showprotected" id="showprotected" /> Show Protected</span>
|
|
</form>
|
|
|
|
<div id="srcout">
|
|
<style>
|
|
#doc3 #classopts { display:none; }
|
|
</style>
|
|
<div class="highlight" ><pre><span class="c">/**</span>
|
|
<span class="c"> * The DataSource utility provides a common configurable interface for widgets</span>
|
|
<span class="c"> * to access a variety of data, from JavaScript arrays to online servers over</span>
|
|
<span class="c"> * XHR.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @namespace YAHOO.util</span>
|
|
<span class="c"> * @module datasource</span>
|
|
<span class="c"> * @requires yahoo, event</span>
|
|
<span class="c"> * @optional connection</span>
|
|
<span class="c"> * @title DataSource Utility</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"> * The DataSource class defines and manages a live set of data for widgets to</span>
|
|
<span class="c"> * interact with. Examples of live databases include in-memory</span>
|
|
<span class="c"> * local data such as a JavaScript array, a JavaScript function, or JSON, or</span>
|
|
<span class="c"> * remote data such as data retrieved through an XHR connection.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @class DataSource</span>
|
|
<span class="c"> * @uses YAHOO.util.EventProvider</span>
|
|
<span class="c"> * @constructor</span>
|
|
<span class="c"> * @param oLiveData {Object} Pointer to live database.</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">util</span><span class="o">.</span><span class="nx">DataSource</span> <span class="o">=</span> <span class="k">function</span><span class="o">(</span><span class="nx">oLiveData</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">oLiveData</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">"Could not instantiate DataSource due to invalid live database"</span><span class="o">,</span>
|
|
<span class="s2">"error"</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="k">this</span><span class="o">.</span><span class="nx">liveData</span> <span class="o">=</span> <span class="nx">oLiveData</span><span class="o">;</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">_oQueue</span> <span class="o">=</span> <span class="o">{</span><span class="nx">interval</span><span class="o">:</span><span class="kc">null</span><span class="o">,</span> <span class="nx">conn</span><span class="o">:</span><span class="kc">null</span><span class="o">,</span> <span class="nx">requests</span><span class="o">:[]};</span>
|
|
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">oLiveData</span><span class="o">.</span><span class="nx">nodeType</span> <span class="o">&&</span> <span class="nx">oLiveData</span><span class="o">.</span><span class="nx">nodeType</span> <span class="o">==</span> <span class="m">9</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">dataType</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_XML</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">YAHOO</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">oLiveData</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">dataType</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_JSARRAY</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">YAHOO</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">oLiveData</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">dataType</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_XHR</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">YAHOO</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">oLiveData</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">dataType</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_JSFUNCTION</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">oLiveData</span><span class="o">.</span><span class="nx">nodeName</span> <span class="o">&&</span> <span class="o">(</span><span class="nx">oLiveData</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">"table"</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">dataType</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">DataSource</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">liveData</span> <span class="o">=</span> <span class="nx">oLiveData</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="o">}</span>
|
|
<span class="k">else</span> <span class="k">if</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">isObject</span><span class="o">(</span><span class="nx">oLiveData</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">dataType</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_JSON</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">dataType</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_UNKNOWN</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="c">// Set any config params passed in to override defaults</span>
|
|
<span class="c"></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">oConfigs</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="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">sConfig</span> <span class="k">in</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">sConfig</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">this</span><span class="o">[</span><span class="nx">sConfig</span><span class="o">]</span> <span class="o">=</span> <span class="nx">oConfigs</span><span class="o">[</span><span class="nx">sConfig</span><span class="o">];</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="c">// Validate and initialize public configs</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">maxCacheEntries</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">maxCacheEntries</span><span class="o">;</span>
|
|
<span class="k">if</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">isNumber</span><span class="o">(</span><span class="nx">maxCacheEntries</span><span class="o">)</span> <span class="o">||</span> <span class="o">(</span><span class="nx">maxCacheEntries</span> <span class="o"><</span> <span class="m">0</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">maxCacheEntries</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="c">// Initialize interval tracker</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">_aIntervals</span> <span class="o">=</span> <span class="o">[];</span>
|
|
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">_sName</span> <span class="o">=</span> <span class="s2">"DataSource instance"</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">DataSource</span><span class="o">.</span><span class="nx">_nIndex</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">DataSource</span><span class="o">.</span><span class="nx">_nIndex</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">"DataSource initialized"</span><span class="o">,</span> <span class="s2">"info"</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">/////////////////////////////////////////////////////////////////////////////</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 a request is made to the local cache.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @event cacheRequestEvent</span>
|
|
<span class="c"> * @param oArgs.request {Object} The request object.</span>
|
|
<span class="c"> * @param oArgs.callback {Function} The callback function.</span>
|
|
<span class="c"> * @param oArgs.caller {Object} (deprecated) Use callback.scope.</span>
|
|
<span class="c"> */</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">createEvent</span><span class="o">(</span><span class="s2">"cacheRequestEvent"</span><span class="o">);</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Fired when data is retrieved from the local cache.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @event cacheResponseEvent</span>
|
|
<span class="c"> * @param oArgs.request {Object} The request object.</span>
|
|
<span class="c"> * @param oArgs.response {Object} The response object.</span>
|
|
<span class="c"> * @param oArgs.callback {Function} The callback function.</span>
|
|
<span class="c"> * @param oArgs.caller {Object} (deprecated) Use callback.scope.</span>
|
|
<span class="c"> * @param oArgs.tId {Number} Transaction ID.</span>
|
|
<span class="c"> */</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">createEvent</span><span class="o">(</span><span class="s2">"cacheResponseEvent"</span><span class="o">);</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Fired when a request is sent to the live data source.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @event requestEvent</span>
|
|
<span class="c"> * @param oArgs.request {Object} The request object.</span>
|
|
<span class="c"> * @param oArgs.callback {Function} The callback function.</span>
|
|
<span class="c"> * @param oArgs.caller {Object} (deprecated) Use callback.scope.</span>
|
|
<span class="c"> */</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">createEvent</span><span class="o">(</span><span class="s2">"requestEvent"</span><span class="o">);</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Fired when live data source sends response.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @event responseEvent</span>
|
|
<span class="c"> * @param oArgs.request {Object} The request object.</span>
|
|
<span class="c"> * @param oArgs.response {Object} The raw response object.</span>
|
|
<span class="c"> * @param oArgs.callback {Function} The callback function.</span>
|
|
<span class="c"> * @param oArgs.caller {Object} (deprecated) Use callback.scope.</span>
|
|
<span class="c"> */</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">createEvent</span><span class="o">(</span><span class="s2">"responseEvent"</span><span class="o">);</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Fired when response is parsed.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @event responseParseEvent</span>
|
|
<span class="c"> * @param oArgs.request {Object} The request object.</span>
|
|
<span class="c"> * @param oArgs.response {Object} The parsed response object.</span>
|
|
<span class="c"> * @param oArgs.callback {Function} The callback function.</span>
|
|
<span class="c"> * @param oArgs.caller {Object} (deprecated) Use callback.scope.</span>
|
|
<span class="c"> */</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">createEvent</span><span class="o">(</span><span class="s2">"responseParseEvent"</span><span class="o">);</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Fired when response is cached.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @event responseCacheEvent</span>
|
|
<span class="c"> * @param oArgs.request {Object} The request object.</span>
|
|
<span class="c"> * @param oArgs.response {Object} The parsed response object.</span>
|
|
<span class="c"> * @param oArgs.callback {Function} The callback function.</span>
|
|
<span class="c"> * @param oArgs.caller {Object} (deprecated) Use callback.scope.</span>
|
|
<span class="c"> */</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">createEvent</span><span class="o">(</span><span class="s2">"responseCacheEvent"</span><span class="o">);</span>
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Fired when an error is encountered with the live data source.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @event dataErrorEvent</span>
|
|
<span class="c"> * @param oArgs.request {Object} The request object.</span>
|
|
<span class="c"> * @param oArgs.callback {Function} The callback function.</span>
|
|
<span class="c"> * @param oArgs.caller {Object} (deprecated) Use callback.scope.</span>
|
|
<span class="c"> * @param oArgs.message {String} The error message.</span>
|
|
<span class="c"> */</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">createEvent</span><span class="o">(</span><span class="s2">"dataErrorEvent"</span><span class="o">);</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Fired when the local cache is flushed.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @event cacheFlushEvent</span>
|
|
<span class="c"> */</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">createEvent</span><span class="o">(</span><span class="s2">"cacheFlushEvent"</span><span class="o">);</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">augment</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">DataSource</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">EventProvider</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="c">/**</span>
|
|
<span class="c"> * Type is unknown.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property TYPE_UNKNOWN</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @final</span>
|
|
<span class="c"> * @default -1</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_UNKNOWN</span> <span class="o">=</span> <span class="o">-</span><span class="m">1</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Type is a JavaScript Array.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property TYPE_JSARRAY</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @final</span>
|
|
<span class="c"> * @default 0</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_JSARRAY</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Type is a JavaScript Function.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property TYPE_JSFUNCTION</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @final</span>
|
|
<span class="c"> * @default 1</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_JSFUNCTION</span> <span class="o">=</span> <span class="m">1</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Type is hosted on a server via an XHR connection.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property TYPE_XHR</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @final</span>
|
|
<span class="c"> * @default 2</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_XHR</span> <span class="o">=</span> <span class="m">2</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Type is JSON.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property TYPE_JSON</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @final</span>
|
|
<span class="c"> * @default 3</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_JSON</span> <span class="o">=</span> <span class="m">3</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Type is XML.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property TYPE_XML</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @final</span>
|
|
<span class="c"> * @default 4</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_XML</span> <span class="o">=</span> <span class="m">4</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Type is plain text.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property TYPE_TEXT</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @final</span>
|
|
<span class="c"> * @default 5</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_TEXT</span> <span class="o">=</span> <span class="m">5</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Type is an HTML TABLE element.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property TYPE_HTMLTABLE</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @final</span>
|
|
<span class="c"> * @default 6</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_HTMLTABLE</span> <span class="o">=</span> <span class="m">6</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Error message for invalid dataresponses.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property ERROR_DATAINVALID</span>
|
|
<span class="c"> * @type String</span>
|
|
<span class="c"> * @final</span>
|
|
<span class="c"> * @default "Invalid data"</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">DataSource</span><span class="o">.</span><span class="nx">ERROR_DATAINVALID</span> <span class="o">=</span> <span class="s2">"Invalid data"</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Error message for null data responses.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property ERROR_DATANULL</span>
|
|
<span class="c"> * @type String</span>
|
|
<span class="c"> * @final</span>
|
|
<span class="c"> * @default "Null data"</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">DataSource</span><span class="o">.</span><span class="nx">ERROR_DATANULL</span> <span class="o">=</span> <span class="s2">"Null data"</span><span class="o">;</span>
|
|
|
|
|
|
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c">//</span>
|
|
<span class="c">// Private variables</span>
|
|
<span class="c">//</span>
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c"></span>
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Internal class variable to index multiple DataSource instances.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property DataSource._nIndex</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @private</span>
|
|
<span class="c"> * @static</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">DataSource</span><span class="o">.</span><span class="nx">_nIndex</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Internal class variable to assign unique transaction IDs.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property DataSource._nTransactionId</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @private</span>
|
|
<span class="c"> * @static</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">DataSource</span><span class="o">.</span><span class="nx">_nTransactionId</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Name of DataSource instance.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property _sName</span>
|
|
<span class="c"> * @type String</span>
|
|
<span class="c"> * @private</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">_sName</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Local cache of data result object literals indexed chronologically.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property _aCache</span>
|
|
<span class="c"> * @type Object[]</span>
|
|
<span class="c"> * @private</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">_aCache</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Local queue of request connections, enabled if queue needs to be managed.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property _oQueue</span>
|
|
<span class="c"> * @type Object</span>
|
|
<span class="c"> * @private</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">_oQueue</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Array of polling interval IDs that have been enabled, needed to clear all intervals.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property _aIntervals</span>
|
|
<span class="c"> * @type Array</span>
|
|
<span class="c"> * @private</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">_aIntervals</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">// Private 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">// Public member variables</span>
|
|
<span class="c">//</span>
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c"></span>
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Max size of the local cache. Set to 0 to turn off caching. Caching is</span>
|
|
<span class="c"> * useful to reduce the number of server connections. Recommended only for data</span>
|
|
<span class="c"> * sources that return comprehensive results for queries or when stale data is</span>
|
|
<span class="c"> * not an issue.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property maxCacheEntries</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @default 0</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">maxCacheEntries</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Pointer to live database.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property liveData</span>
|
|
<span class="c"> * @type Object</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">liveData</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Where the live data is held.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property dataType</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @default YAHOO.util.DataSource.TYPE_UNKNOWN</span>
|
|
<span class="c"> *</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">dataType</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_UNKNOWN</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Format of response.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property responseType</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @default YAHOO.util.DataSource.TYPE_UNKNOWN</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">responseType</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_UNKNOWN</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Response schema object literal takes a combination of the following properties:</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * <dl></span>
|
|
<span class="c"> * <dt>resultsList</dt> <dd>Pointer to array of tabular data</dd></span>
|
|
<span class="c"> * <dt>resultNode</dt> <dd>Pointer to node name of row data (XML data only)</dd></span>
|
|
<span class="c"> * <dt>recordDelim</dt> <dd>Record delimiter (text data only)</dd></span>
|
|
<span class="c"> * <dt>fieldDelim</dt> <dd>Field delimiter (text data only)</dd></span>
|
|
<span class="c"> * <dt>fields</dt> <dd>Array of field names (aka keys), or array of object literals</span>
|
|
<span class="c"> * such as: {key:"fieldname",parser:YAHOO.util.DataSource.parseDate}</dd></span>
|
|
<span class="c"> * <dt>metaFields</dt> <dd>Object literal of keys to include in the oParsedResponse.meta collection</dd></span>
|
|
<span class="c"> * <dt>metaNode</dt> <dd>Name of the node under which to search for meta information in XML response data</dd></span>
|
|
<span class="c"> * </dl></span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property responseSchema</span>
|
|
<span class="c"> * @type Object</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">responseSchema</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Alias to YUI Connection Manager, to allow implementers to customize the utility.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property connMgr</span>
|
|
<span class="c"> * @type Object</span>
|
|
<span class="c"> * @default YAHOO.util.Connect</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">connMgr</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * If data is accessed over XHR via Connection Manager, this setting defines</span>
|
|
<span class="c"> * request/response management in the following manner:</span>
|
|
<span class="c"> * <dl></span>
|
|
<span class="c"> * <dt>queueRequests</dt></span>
|
|
<span class="c"> * <dd>If a request is already in progress, wait until response is returned</span>
|
|
<span class="c"> * before sending the next request.</dd></span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * <dt>cancelStaleRequests</dt></span>
|
|
<span class="c"> * <dd>If a request is already in progress, cancel it before sending the next</span>
|
|
<span class="c"> * request.</dd></span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * <dt>ignoreStaleResponses</dt></span>
|
|
<span class="c"> * <dd>Send all requests, but handle only the response for the most recently</span>
|
|
<span class="c"> * sent request.</dd></span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * <dt>allowAll</dt></span>
|
|
<span class="c"> * <dd>Send all requests and handle all responses.</dd></span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * </dl></span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property connXhrMode</span>
|
|
<span class="c"> * @type String</span>
|
|
<span class="c"> * @default "allowAll"</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">connXhrMode</span> <span class="o">=</span> <span class="s2">"allowAll"</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * If data is accessed over XHR via Connection Manager, true if data should be</span>
|
|
<span class="c"> * sent via POST, otherwise data will be sent via GET.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property connMethodPost</span>
|
|
<span class="c"> * @type Boolean</span>
|
|
<span class="c"> * @default false</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">connMethodPost</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * If data is accessed over XHR via Connection Manager, the connection timeout</span>
|
|
<span class="c"> * defines how many milliseconds the XHR connection will wait for a server</span>
|
|
<span class="c"> * response. Any non-zero value will enable the Connection utility's</span>
|
|
<span class="c"> * Auto-Abort feature.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property connTimeout</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @default 0</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">connTimeout</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
|
|
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c">//</span>
|
|
<span class="c">// Public static methods</span>
|
|
<span class="c">//</span>
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c"></span>
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Converts data to type String.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method DataSource.parseString</span>
|
|
<span class="c"> * @param oData {String | Number | Boolean | Date | Array | Object} Data to parse.</span>
|
|
<span class="c"> * The special values null and undefined will return null.</span>
|
|
<span class="c"> * @return {Number} A string, or null.</span>
|
|
<span class="c"> * @static</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">DataSource</span><span class="o">.</span><span class="nx">parseString</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">// Special case null and undefined</span>
|
|
<span class="c"></span> <span class="k">if</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">isValue</span><span class="o">(</span><span class="nx">oData</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">//Convert to string</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">string</span> <span class="o">=</span> <span class="nx">oData</span> <span class="o">+</span> <span class="s2">""</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">YAHOO</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">string</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="k">return</span> <span class="nx">string</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">"Could not convert data "</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">" to type String"</span><span class="o">,</span> <span class="s2">"warn"</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">/**</span>
|
|
<span class="c"> * Converts data to type Number.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method DataSource.parseNumber</span>
|
|
<span class="c"> * @param oData {String | Number | Boolean | Null} Data to convert. Beware, null</span>
|
|
<span class="c"> * returns as 0.</span>
|
|
<span class="c"> * @return {Number} A number, or null if NaN.</span>
|
|
<span class="c"> * @static</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">DataSource</span><span class="o">.</span><span class="nx">parseNumber</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">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">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">"Could not convert data "</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">" to type Number"</span><span class="o">,</span> <span class="s2">"warn"</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">// Backward compatibility</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">DataSource</span><span class="o">.</span><span class="nx">convertNumber</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="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">"The method YAHOO.util.DataSource.convertNumber() has been"</span> <span class="o">+</span>
|
|
<span class="s2">" deprecated in favor of YAHOO.util.DataSource.parseNumber()"</span><span class="o">,</span> <span class="s2">"warn"</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">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">parseNumber</span><span class="o">(</span><span class="nx">oData</span><span class="o">);</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Converts data to type Date.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method DataSource.parseDate</span>
|
|
<span class="c"> * @param oData {Date | String | Number} Data to convert.</span>
|
|
<span class="c"> * @return {Date} A Date instance.</span>
|
|
<span class="c"> * @static</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">DataSource</span><span class="o">.</span><span class="nx">parseDate</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="k">var</span> <span class="nx">date</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
|
|
<span class="c">//Convert to date</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(!(</span><span class="nx">oData</span> <span class="k">instanceof</span> <span class="nb">Date</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">date</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</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="k">return</span> <span class="nx">oData</span><span class="o">;</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">date</span> <span class="k">instanceof</span> <span class="nb">Date</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">return</span> <span class="nx">date</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">"Could not convert data "</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">" to type Date"</span><span class="o">,</span> <span class="s2">"warn"</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">// Backward compatibility</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">DataSource</span><span class="o">.</span><span class="nx">convertDate</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="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">"The method YAHOO.util.DataSource.convertDate() has been"</span> <span class="o">+</span>
|
|
<span class="s2">" deprecated in favor of YAHOO.util.DataSource.parseDate()"</span><span class="o">,</span> <span class="s2">"warn"</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">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">parseDate</span><span class="o">(</span><span class="nx">oData</span><span class="o">);</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"> * Public accessor to the unique name of the DataSource instance.</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">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</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="k">this</span><span class="o">.</span><span class="nx">_sName</span><span class="o">;</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Overridable method passes request to cache and returns cached response if any,</span>
|
|
<span class="c"> * refreshing the hit in the cache as the newest item. Returns null if there is</span>
|
|
<span class="c"> * no cache hit.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method getCachedResponse</span>
|
|
<span class="c"> * @param oRequest {Object} Request object.</span>
|
|
<span class="c"> * @param oCallback {Function} Handler function to receive the response.</span>
|
|
<span class="c"> * @param oCaller {Object} The Calling object that is making the request.</span>
|
|
<span class="c"> * @return {Object} Cached response object or null.</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">getCachedResponse</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">oCallback</span><span class="o">,</span> <span class="nx">oCaller</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">aCache</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aCache</span><span class="o">;</span>
|
|
|
|
<span class="c">// If cache is enabled...</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">maxCacheEntries</span> <span class="o">></span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// Initialize local cache</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">aCache</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">_aCache</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">"Cache initialized"</span><span class="o">,</span> <span class="s2">"info"</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">// Look in local cache</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">nCacheLength</span> <span class="o">=</span> <span class="nx">aCache</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">nCacheLength</span> <span class="o">></span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">oResponse</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">"cacheRequestEvent"</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">callback</span><span class="o">:</span><span class="nx">oCallback</span><span class="o">,</span><span class="nx">caller</span><span class="o">:</span><span class="nx">oCaller</span><span class="o">});</span>
|
|
|
|
<span class="c">// Loop through each cached element</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">nCacheLength</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="m">0</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">oCacheElem</span> <span class="o">=</span> <span class="nx">aCache</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
|
|
|
|
<span class="c">// Defer cache hit logic to a public overridable method</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">isCacheHit</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span><span class="nx">oCacheElem</span><span class="o">.</span><span class="nx">request</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="c">// The cache returned a hit!</span>
|
|
<span class="c"></span> <span class="c">// Grab the cached response</span>
|
|
<span class="c"></span> <span class="nx">oResponse</span> <span class="o">=</span> <span class="nx">oCacheElem</span><span class="o">.</span><span class="nx">response</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">"cacheResponseEvent"</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">callback</span><span class="o">:</span><span class="nx">oCallback</span><span class="o">,</span><span class="nx">caller</span><span class="o">:</span><span class="nx">oCaller</span><span class="o">});</span>
|
|
|
|
<span class="c">// Refresh the position of the cache hit</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="nx">nCacheLength</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">"Refreshing cache position of the response for \""</span> <span class="o">+</span> <span class="nx">oRequest</span> <span class="o">+</span> <span class="s2">"\""</span><span class="o">,</span> <span class="s2">"info"</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">// Remove element from its original location</span>
|
|
<span class="c"></span> <span class="nx">aCache</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">i</span><span class="o">,</span><span class="m">1</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">"Cleared from cache the response for \""</span> <span class="o">+</span> <span class="nx">oRequest</span> <span class="o">+</span> <span class="s2">"\""</span><span class="o">,</span> <span class="s2">"info"</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">// Add as newest</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">addToCache</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="o">}</span>
|
|
<span class="k">break</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">"The cached response for \""</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">oRequest</span><span class="o">)</span> <span class="o">+</span>
|
|
<span class="s2">"\" is "</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">oResponse</span><span class="o">),</span> <span class="s2">"info"</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">oResponse</span><span class="o">;</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">aCache</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">_aCache</span> <span class="o">=</span> <span class="kc">null</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">"Cache destroyed"</span><span class="o">,</span> <span class="s2">"info"</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="kc">null</span><span class="o">;</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Default overridable method matches given request to given cached request.</span>
|
|
<span class="c"> * Returns true if is a hit, returns false otherwise. Implementers should</span>
|
|
<span class="c"> * override this method to customize the cache-matching algorithm.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method isCacheHit</span>
|
|
<span class="c"> * @param oRequest {Object} Request object.</span>
|
|
<span class="c"> * @param oCachedRequest {Object} Cached request object.</span>
|
|
<span class="c"> * @return {Boolean} True if given request matches cached request, false otherwise.</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">isCacheHit</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">oCachedRequest</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">return</span> <span class="o">(</span><span class="nx">oRequest</span> <span class="o">===</span> <span class="nx">oCachedRequest</span><span class="o">);</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Adds a new item to the cache. If cache is full, evicts the stalest item</span>
|
|
<span class="c"> * before adding the new item.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method addToCache</span>
|
|
<span class="c"> * @param oRequest {Object} Request object.</span>
|
|
<span class="c"> * @param oResponse {Object} Response object to cache.</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">addToCache</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="o">{</span>
|
|
<span class="k">var</span> <span class="nx">aCache</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_aCache</span><span class="o">;</span>
|
|
<span class="k">if</span><span class="o">(!</span><span class="nx">aCache</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">// If the cache is full, make room by removing stalest element (index=0)</span>
|
|
<span class="c"></span> <span class="k">while</span><span class="o">(</span><span class="nx">aCache</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">maxCacheEntries</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">aCache</span><span class="o">.</span><span class="nx">shift</span><span class="o">();</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="c">// Add to cache in the newest position, at the end of the array</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">oCacheElem</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">aCache</span><span class="o">[</span><span class="nx">aCache</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">oCacheElem</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">"responseCacheEvent"</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">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">"Cached the response for \""</span> <span class="o">+</span> <span class="nx">oRequest</span> <span class="o">+</span> <span class="s2">"\""</span><span class="o">,</span> <span class="s2">"info"</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"> * Flushes cache.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method flushCache</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">flushCache</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">_aCache</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">_aCache</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">"cacheFlushEvent"</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">"Flushed the cache"</span><span class="o">,</span> <span class="s2">"info"</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 up a polling mechanism to send requests at set intervals and forward</span>
|
|
<span class="c"> * responses to given callback.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method setInterval</span>
|
|
<span class="c"> * @param nMsec {Number} Length of interval in milliseconds.</span>
|
|
<span class="c"> * @param oRequest {Object} Request object.</span>
|
|
<span class="c"> * @param oCallback {Function} Handler function to receive the response.</span>
|
|
<span class="c"> * @param oCaller {Object} (deprecated) Use oCallback.scope.</span>
|
|
<span class="c"> * @return {Number} Interval ID.</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">setInterval</span> <span class="o">=</span> <span class="k">function</span><span class="o">(</span><span class="nx">nMsec</span><span class="o">,</span> <span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oCallback</span><span class="o">,</span> <span class="nx">oCaller</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">if</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">isNumber</span><span class="o">(</span><span class="nx">nMsec</span><span class="o">)</span> <span class="o">&&</span> <span class="o">(</span><span class="nx">nMsec</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">"Enabling polling to live data for \""</span> <span class="o">+</span> <span class="nx">oRequest</span> <span class="o">+</span> <span class="s2">"\" at interval "</span> <span class="o">+</span> <span class="nx">nMsec</span><span class="o">,</span> <span class="s2">"info"</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">oSelf</span> <span class="o">=</span> <span class="k">this</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">nId</span> <span class="o">=</span> <span class="nx">setInterval</span><span class="o">(</span><span class="k">function</span><span class="o">()</span> <span class="o">{</span>
|
|
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">makeConnection</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oCallback</span><span class="o">,</span> <span class="nx">oCaller</span><span class="o">);</span>
|
|
<span class="o">},</span> <span class="nx">nMsec</span><span class="o">);</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">_aIntervals</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">nId</span><span class="o">);</span>
|
|
<span class="k">return</span> <span class="nx">nId</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">"Could not enable polling to live data for \""</span> <span class="o">+</span> <span class="nx">oRequest</span> <span class="o">+</span> <span class="s2">"\" at interval "</span> <span class="o">+</span> <span class="nx">nMsec</span><span class="o">,</span> <span class="s2">"info"</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 polling mechanism associated with the given interval ID.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method clearInterval</span>
|
|
<span class="c"> * @param nId {Number} Interval ID.</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">clearInterval</span> <span class="o">=</span> <span class="k">function</span><span class="o">(</span><span class="nx">nId</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// Remove from tracker if there</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">_aIntervals</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">>-</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="o">===</span> <span class="nx">nId</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">i</span><span class="o">,</span><span class="m">1</span><span class="o">);</span>
|
|
<span class="nx">clearInterval</span><span class="o">(</span><span class="nx">nId</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Disables all known polling intervals.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method clearAllIntervals</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">clearAllIntervals</span> <span class="o">=</span> <span class="k">function</span><span class="o">(</span><span class="nx">nId</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">_aIntervals</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">>-</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">tracker</span><span class="o">.</span><span class="nx">splice</span><span class="o">(</span><span class="nx">i</span><span class="o">,</span><span class="m">1</span><span class="o">);</span>
|
|
<span class="nx">clearInterval</span><span class="o">(</span><span class="nx">nId</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Executes a configured callback. For object literal callbacks, the third</span>
|
|
<span class="c"> * param determines whether to execute the success handler or failure handler.</span>
|
|
<span class="c"> * @method issueCallback</span>
|
|
<span class="c"> * @param callback {Function|Object} the callback to execute</span>
|
|
<span class="c"> * @param params {Array} params to be passed to the callback method</span>
|
|
<span class="c"> * @param error {Boolean} whether an error occurred</span>
|
|
<span class="c"> * @param scope {Object} the scope from which to execute the callback</span>
|
|
<span class="c"> * (deprecated - use an object literal callback)</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">DataSource</span><span class="o">.</span><span class="nx">issueCallback</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">callback</span><span class="o">,</span><span class="nx">params</span><span class="o">,</span><span class="nx">error</span><span class="o">,</span><span class="nx">scope</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">if</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">isFunction</span><span class="o">(</span><span class="nx">callback</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">callback</span><span class="o">.</span><span class="nx">apply</span><span class="o">(</span><span class="nx">scope</span><span class="o">,</span> <span class="nx">params</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">YAHOO</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">callback</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">scope</span> <span class="o">=</span> <span class="nx">callback</span><span class="o">.</span><span class="nx">scope</span> <span class="o">||</span> <span class="nx">scope</span> <span class="o">||</span> <span class="nb">window</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">callbackFunc</span> <span class="o">=</span> <span class="nx">callback</span><span class="o">.</span><span class="nx">success</span><span class="o">;</span>
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">error</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">callbackFunc</span> <span class="o">=</span> <span class="nx">callback</span><span class="o">.</span><span class="nx">failure</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">callbackFunc</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">callbackFunc</span><span class="o">.</span><span class="nx">apply</span><span class="o">(</span><span class="nx">scope</span><span class="o">,</span> <span class="nx">params</span><span class="o">.</span><span class="nx">concat</span><span class="o">([</span><span class="nx">callback</span><span class="o">.</span><span class="nx">argument</span><span class="o">]));</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * First looks for cached response, then sends request to live data.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method sendRequest</span>
|
|
<span class="c"> * @param oRequest {Object} Request object.</span>
|
|
<span class="c"> * @param oCallback {Object} An object literal with the following properties:</span>
|
|
<span class="c"> * <dl></span>
|
|
<span class="c"> * <dt><code>success</code></dt></span>
|
|
<span class="c"> * <dd>The function to call when the data is ready.</dd></span>
|
|
<span class="c"> * <dt><code>failure</code></dt></span>
|
|
<span class="c"> * <dd>The function to call upon a response failure condition.</dd></span>
|
|
<span class="c"> * <dt><code>scope</code></dt></span>
|
|
<span class="c"> * <dd>The object to serve as the scope for the success and failure handlers.</dd></span>
|
|
<span class="c"> * <dt><code>argument</code></dt></span>
|
|
<span class="c"> * <dd>Arbitrary data that will be passed back to the success and failure handlers.</dd></span>
|
|
<span class="c"> * </dl> </span>
|
|
<span class="c"> * @param oCaller {Object} (deprecated) Use oCallback.scope.</span>
|
|
<span class="c"> * @return {Number} Transaction ID, or null if response found in cache.</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">sendRequest</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">oCallback</span><span class="o">,</span> <span class="nx">oCaller</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// First look in cache</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">oCachedResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">getCachedResponse</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oCallback</span><span class="o">,</span> <span class="nx">oCaller</span><span class="o">);</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">oCachedResponse</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">DataSource</span><span class="o">.</span><span class="nx">issueCallback</span><span class="o">(</span><span class="nx">oCallback</span><span class="o">,[</span><span class="nx">oRequest</span><span class="o">,</span><span class="nx">oCachedResponse</span><span class="o">],</span><span class="kc">false</span><span class="o">,</span><span class="nx">oCaller</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">// Not in cache, so forward request to live data</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">"Making connection to live data for \""</span> <span class="o">+</span> <span class="nx">oRequest</span> <span class="o">+</span> <span class="s2">"\""</span><span class="o">,</span> <span class="s2">"info"</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">makeConnection</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oCallback</span><span class="o">,</span> <span class="nx">oCaller</span><span class="o">);</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Overridable method provides default functionality to make a connection to</span>
|
|
<span class="c"> * live data in order to send request. The response coming back is then</span>
|
|
<span class="c"> * forwarded to the handleResponse function. This method should be customized</span>
|
|
<span class="c"> * to achieve more complex implementations.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method makeConnection</span>
|
|
<span class="c"> * @param oRequest {Object} Request object.</span>
|
|
<span class="c"> * @param oCallback {Object} Callback object literal.</span>
|
|
<span class="c"> * @param oCaller {Object} (deprecated) Use oCallback.scope.</span>
|
|
<span class="c"> * @return {Number} Transaction ID.</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">makeConnection</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">oCallback</span><span class="o">,</span> <span class="nx">oCaller</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">"requestEvent"</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">callback</span><span class="o">:</span><span class="nx">oCallback</span><span class="o">,</span><span class="nx">caller</span><span class="o">:</span><span class="nx">oCaller</span><span class="o">});</span>
|
|
<span class="k">var</span> <span class="nx">oRawResponse</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">tId</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">DataSource</span><span class="o">.</span><span class="nx">_nTransactionId</span><span class="o">++;</span>
|
|
|
|
<span class="c">// How to make the connection depends on the type of data</span>
|
|
<span class="c"></span> <span class="nx">switch</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">dataType</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// If the live data is a JavaScript Function</span>
|
|
<span class="c"></span> <span class="c">// pass the request in as a parameter and</span>
|
|
<span class="c"></span> <span class="c">// forward the return value to the handler</span>
|
|
<span class="c"></span> <span class="nx">case</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">TYPE_JSFUNCTION</span><span class="o">:</span>
|
|
<span class="nx">oRawResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">liveData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">);</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">handleResponse</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oRawResponse</span><span class="o">,</span> <span class="nx">oCallback</span><span class="o">,</span> <span class="nx">oCaller</span><span class="o">,</span> <span class="nx">tId</span><span class="o">);</span>
|
|
<span class="k">break</span><span class="o">;</span>
|
|
<span class="c">// If the live data is over Connection Manager</span>
|
|
<span class="c"></span> <span class="c">// set up the callback object and</span>
|
|
<span class="c"></span> <span class="c">// pass the request in as a URL query and</span>
|
|
<span class="c"></span> <span class="c">// forward the response to the handler</span>
|
|
<span class="c"></span> <span class="nx">case</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">TYPE_XHR</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="k">var</span> <span class="nx">oConnMgr</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">connMgr</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">Connect</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">oQueue</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_oQueue</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Define Connection Manager success handler</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method _xhrSuccess</span>
|
|
<span class="c"> * @param oResponse {Object} HTTPXMLRequest object</span>
|
|
<span class="c"> * @private</span>
|
|
<span class="c"> */</span>
|
|
<span class="k">var</span> <span class="nx">_xhrSuccess</span> <span class="o">=</span> <span class="k">function</span><span class="o">(</span><span class="nx">oResponse</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// If response ID does not match last made request ID,</span>
|
|
<span class="c"></span> <span class="c">// silently fail and wait for the next response</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oResponse</span> <span class="o">&&</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">connXhrMode</span> <span class="o">==</span> <span class="s2">"ignoreStaleResponses"</span><span class="o">)</span> <span class="o">&&</span>
|
|
<span class="o">(</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">tId</span> <span class="o">!=</span> <span class="nx">oQueue</span><span class="o">.</span><span class="nx">conn</span><span class="o">.</span><span class="nx">tId</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">"Ignored stale response"</span><span class="o">,</span> <span class="s2">"warn"</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">// Error if no response</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(!</span><span class="nx">oResponse</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">"dataErrorEvent"</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">callback</span><span class="o">:</span><span class="nx">oCallback</span><span class="o">,</span> <span class="nx">caller</span><span class="o">:</span><span class="nx">oCaller</span><span class="o">,</span>
|
|
<span class="nx">message</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">DataSource</span><span class="o">.</span><span class="nx">ERROR_DATANULL</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="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">ERROR_DATANULL</span><span class="o">,</span> <span class="s2">"error"</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">// Send error response back to the caller with the error flag on</span>
|
|
<span class="c"></span> <span class="c">// TODO: should this send oResponse, considering the fork?</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">DataSource</span><span class="o">.</span><span class="nx">issueCallback</span><span class="o">(</span><span class="nx">oCallback</span><span class="o">,[</span><span class="nx">oRequest</span><span class="o">,</span> <span class="o">{</span><span class="nx">error</span><span class="o">:</span><span class="kc">true</span><span class="o">}],</span> <span class="kc">true</span><span class="o">,</span> <span class="nx">oCaller</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">// Forward to handler</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">handleResponse</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">oCallback</span><span class="o">,</span> <span class="nx">oCaller</span><span class="o">,</span> <span class="nx">tId</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Define Connection Manager failure handler</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method _xhrFailure</span>
|
|
<span class="c"> * @param oResponse {Object} HTTPXMLRequest object</span>
|
|
<span class="c"> * @private</span>
|
|
<span class="c"> */</span>
|
|
<span class="k">var</span> <span class="nx">_xhrFailure</span> <span class="o">=</span> <span class="k">function</span><span class="o">(</span><span class="nx">oResponse</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">"dataErrorEvent"</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">callback</span><span class="o">:</span><span class="nx">oCallback</span><span class="o">,</span> <span class="nx">caller</span><span class="o">:</span><span class="nx">oCaller</span><span class="o">,</span>
|
|
<span class="nx">message</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">DataSource</span><span class="o">.</span><span class="nx">ERROR_DATAINVALID</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="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">ERROR_DATAINVALID</span> <span class="o">+</span> <span class="s2">": "</span> <span class="o">+</span>
|
|
<span class="nx">oResponse</span><span class="o">.</span><span class="nx">statusText</span><span class="o">,</span> <span class="s2">"error"</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">// Backward compatibility</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">liveData</span><span class="o">.</span><span class="nx">lastIndexOf</span><span class="o">(</span><span class="s2">"?"</span><span class="o">)</span> <span class="o">!==</span> <span class="k">this</span><span class="o">.</span><span class="nx">liveData</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="nx">oRequest</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">(</span><span class="s2">"?"</span><span class="o">)</span> <span class="o">!==</span> <span class="m">0</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">"DataSources using XHR no longer supply a \"?\""</span> <span class="o">+</span>
|
|
<span class="s2">" between the host and query parameters"</span> <span class="o">+</span>
|
|
<span class="s2">" -- please check that the request URL is correct"</span><span class="o">,</span> <span class="s2">"warn"</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">// Send failure response back to the caller with the error flag on</span>
|
|
<span class="c"></span> <span class="nx">oResponse</span> <span class="o">=</span> <span class="nx">oResponse</span> <span class="o">||</span> <span class="o">{};</span>
|
|
<span class="nx">oResponse</span><span class="o">.</span><span class="nx">error</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">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">issueCallback</span><span class="o">(</span><span class="nx">oCallback</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="kc">true</span><span class="o">,</span> <span class="nx">oCaller</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"> * Define Connection Manager callback object</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property _xhrCallback</span>
|
|
<span class="c"> * @param oResponse {Object} HTTPXMLRequest object</span>
|
|
<span class="c"> * @private</span>
|
|
<span class="c"> */</span>
|
|
<span class="k">var</span> <span class="nx">_xhrCallback</span> <span class="o">=</span> <span class="o">{</span>
|
|
<span class="nx">success</span><span class="o">:</span><span class="nx">_xhrSuccess</span><span class="o">,</span>
|
|
<span class="nx">failure</span><span class="o">:</span><span class="nx">_xhrFailure</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="c">// Apply Connection Manager timeout</span>
|
|
<span class="c"></span> <span class="k">if</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">isNumber</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">connTimeout</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">_xhrCallback</span><span class="o">.</span><span class="nx">timeout</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">connTimeout</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="c">// Cancel stale requests</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">connXhrMode</span> <span class="o">==</span> <span class="s2">"cancelStaleRequests"</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// Look in queue for stale requests</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oQueue</span><span class="o">.</span><span class="nx">conn</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">oConnMgr</span><span class="o">.</span><span class="nx">abort</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">oConnMgr</span><span class="o">.</span><span class="nx">abort</span><span class="o">(</span><span class="nx">oQueue</span><span class="o">.</span><span class="nx">conn</span><span class="o">);</span>
|
|
<span class="nx">oQueue</span><span class="o">.</span><span class="nx">conn</span> <span class="o">=</span> <span class="kc">null</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">"Canceled stale request"</span><span class="o">,</span> <span class="s2">"warn"</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">"Could not find Connection Manager abort() function"</span><span class="o">,</span> <span class="s2">"error"</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">// Get ready to send the request URL</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oConnMgr</span> <span class="o">&&</span> <span class="nx">oConnMgr</span><span class="o">.</span><span class="nx">asyncRequest</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">sLiveData</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">liveData</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">isPost</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">connMethodPost</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">sMethod</span> <span class="o">=</span> <span class="o">(</span><span class="nx">isPost</span><span class="o">)</span> <span class="o">?</span> <span class="s2">"POST"</span> <span class="o">:</span> <span class="s2">"GET"</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">sUri</span> <span class="o">=</span> <span class="o">(</span><span class="nx">isPost</span><span class="o">)</span> <span class="o">?</span> <span class="nx">sLiveData</span> <span class="o">:</span> <span class="nx">sLiveData</span><span class="o">+</span><span class="nx">oRequest</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">sRequest</span> <span class="o">=</span> <span class="o">(</span><span class="nx">isPost</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oRequest</span> <span class="o">:</span> <span class="kc">null</span><span class="o">;</span>
|
|
|
|
<span class="c">// Send the request right away</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">connXhrMode</span> <span class="o">!=</span> <span class="s2">"queueRequests"</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">oQueue</span><span class="o">.</span><span class="nx">conn</span> <span class="o">=</span> <span class="nx">oConnMgr</span><span class="o">.</span><span class="nx">asyncRequest</span><span class="o">(</span><span class="nx">sMethod</span><span class="o">,</span> <span class="nx">sUri</span><span class="o">,</span> <span class="nx">_xhrCallback</span><span class="o">,</span> <span class="nx">sRequest</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// Queue up then send the request</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
|
|
<span class="c">// Found a request already in progress</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oQueue</span><span class="o">.</span><span class="nx">conn</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// Add request to queue</span>
|
|
<span class="c"></span> <span class="nx">oQueue</span><span class="o">.</span><span class="nx">requests</span><span class="o">.</span><span class="nx">push</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">callback</span><span class="o">:</span><span class="nx">_xhrCallback</span><span class="o">});</span>
|
|
|
|
<span class="c">// Interval needs to be started</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(!</span><span class="nx">oQueue</span><span class="o">.</span><span class="nx">interval</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">oQueue</span><span class="o">.</span><span class="nx">interval</span> <span class="o">=</span> <span class="nx">setInterval</span><span class="o">(</span><span class="k">function</span><span class="o">()</span> <span class="o">{</span>
|
|
<span class="c">// Connection is in progress</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oConnMgr</span><span class="o">.</span><span class="nx">isCallInProgress</span><span class="o">(</span><span class="nx">oQueue</span><span class="o">.</span><span class="nx">conn</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="c">// Send next request</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oQueue</span><span class="o">.</span><span class="nx">requests</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="nx">sUri</span> <span class="o">=</span> <span class="o">(</span><span class="nx">isPost</span><span class="o">)</span> <span class="o">?</span> <span class="nx">sLiveData</span> <span class="o">:</span> <span class="nx">sLiveData</span><span class="o">+</span><span class="nx">oQueue</span><span class="o">.</span><span class="nx">requests</span><span class="o">[</span><span class="m">0</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="o">(</span><span class="nx">isPost</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oQueue</span><span class="o">.</span><span class="nx">requests</span><span class="o">[</span><span class="m">0</span><span class="o">].</span><span class="nx">request</span> <span class="o">:</span> <span class="kc">null</span><span class="o">;</span>
|
|
<span class="nx">oQueue</span><span class="o">.</span><span class="nx">conn</span> <span class="o">=</span> <span class="nx">oConnMgr</span><span class="o">.</span><span class="nx">asyncRequest</span><span class="o">(</span><span class="nx">sMethod</span><span class="o">,</span> <span class="nx">sUri</span><span class="o">,</span> <span class="nx">oQueue</span><span class="o">.</span><span class="nx">requests</span><span class="o">[</span><span class="m">0</span><span class="o">].</span><span class="nx">callback</span><span class="o">,</span> <span class="nx">sRequest</span><span class="o">);</span>
|
|
|
|
<span class="c">// Remove request from queue</span>
|
|
<span class="c"></span> <span class="nx">oQueue</span><span class="o">.</span><span class="nx">requests</span><span class="o">.</span><span class="nx">shift</span><span class="o">();</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// No more requests</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
|
|
<span class="nx">clearInterval</span><span class="o">(</span><span class="nx">oQueue</span><span class="o">.</span><span class="nx">interval</span><span class="o">);</span>
|
|
<span class="nx">oQueue</span><span class="o">.</span><span class="nx">interval</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
<span class="o">},</span> <span class="m">50</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// Nothing is in progress</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
|
|
<span class="nx">oQueue</span><span class="o">.</span><span class="nx">conn</span> <span class="o">=</span> <span class="nx">oConnMgr</span><span class="o">.</span><span class="nx">asyncRequest</span><span class="o">(</span><span class="nx">sMethod</span><span class="o">,</span> <span class="nx">sUri</span><span class="o">,</span> <span class="nx">_xhrCallback</span><span class="o">,</span> <span class="nx">sRequest</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">"Could not find Connection Manager asyncRequest() function"</span><span class="o">,</span> <span class="s2">"error"</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">// Send null response back to the caller with the error flag on</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">DataSource</span><span class="o">.</span><span class="nx">issueCallback</span><span class="o">(</span><span class="nx">oCallback</span><span class="o">,[</span><span class="nx">oRequest</span><span class="o">,{</span><span class="nx">error</span><span class="o">:</span><span class="kc">true</span><span class="o">}],</span><span class="kc">true</span><span class="o">,</span><span class="nx">oCaller</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="k">break</span><span class="o">;</span>
|
|
<span class="c">// Simply forward the entire data object to the handler</span>
|
|
<span class="c"></span> <span class="nx">default</span><span class="o">:</span>
|
|
<span class="c">/* accounts for the following cases:</span>
|
|
<span class="c"> YAHOO.util.DataSource.TYPE_UNKNOWN:</span>
|
|
<span class="c"> YAHOO.util.DataSource.TYPE_JSARRAY:</span>
|
|
<span class="c"> YAHOO.util.DataSource.TYPE_JSON:</span>
|
|
<span class="c"> YAHOO.util.DataSource.TYPE_HTMLTABLE:</span>
|
|
<span class="c"> YAHOO.util.DataSource.TYPE_XML:</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">oRawResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">liveData</span><span class="o">;</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">handleResponse</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oRawResponse</span><span class="o">,</span> <span class="nx">oCallback</span><span class="o">,</span> <span class="nx">oCaller</span><span class="o">,</span> <span class="nx">tId</span><span class="o">);</span>
|
|
<span class="k">break</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="k">return</span> <span class="nx">tId</span><span class="o">;</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Receives raw data response and type converts to XML, JSON, etc as necessary.</span>
|
|
<span class="c"> * Forwards oFullResponse to appropriate parsing function to get turned into</span>
|
|
<span class="c"> * oParsedResponse. Calls doBeforeCallback() and adds oParsedResponse to </span>
|
|
<span class="c"> * the cache when appropriate before calling issueCallback().</span>
|
|
<span class="c"> * </span>
|
|
<span class="c"> * The oParsedResponse object literal has the following properties:</span>
|
|
<span class="c"> * <dl></span>
|
|
<span class="c"> * <dd><dt>tId {Number}</dt> Unique transaction ID</dd></span>
|
|
<span class="c"> * <dd><dt>results {Array}</dt> Array of parsed data results</dd></span>
|
|
<span class="c"> * <dd><dt>error {Boolean}</dt> True if there was an error</dd></span>
|
|
<span class="c"> * <dd><dt>totalRecords {Number}</dt> Total number of records (if available)</dd> </span>
|
|
<span class="c"> * </dl></span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method handleResponse</span>
|
|
<span class="c"> * @param oRequest {Object} Request object</span>
|
|
<span class="c"> * @param oRawResponse {Object} The raw response from the live database.</span>
|
|
<span class="c"> * @param oCallback {Object} Callback object literal.</span>
|
|
<span class="c"> * @param oCaller {Object} (deprecated) Use oCallback.scope.</span>
|
|
<span class="c"> * @param tId {Number} Transaction ID.</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">handleResponse</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">oRawResponse</span><span class="o">,</span> <span class="nx">oCallback</span><span class="o">,</span> <span class="nx">oCaller</span><span class="o">,</span> <span class="nx">tId</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">"responseEvent"</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">oRawResponse</span><span class="o">,</span>
|
|
<span class="nx">callback</span><span class="o">:</span><span class="nx">oCallback</span><span class="o">,</span> <span class="nx">caller</span><span class="o">:</span><span class="nx">oCaller</span><span class="o">,</span> <span class="nx">tId</span><span class="o">:</span> <span class="nx">tId</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">"Received live data response for \""</span> <span class="o">+</span> <span class="nx">oRequest</span> <span class="o">+</span> <span class="s2">"\""</span><span class="o">,</span> <span class="s2">"info"</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">xhr</span> <span class="o">=</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">dataType</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">DataSource</span><span class="o">.</span><span class="nx">TYPE_XHR</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">oParsedResponse</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">oFullResponse</span> <span class="o">=</span> <span class="nx">oRawResponse</span><span class="o">;</span>
|
|
|
|
<span class="nx">switch</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">responseType</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">case</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">TYPE_JSARRAY</span><span class="o">:</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">xhr</span> <span class="o">&&</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">responseText</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">responseText</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeParseData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="nx">oParsedResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">parseArrayData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="k">break</span><span class="o">;</span>
|
|
<span class="nx">case</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">TYPE_JSON</span><span class="o">:</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">xhr</span> <span class="o">&&</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">responseText</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">responseText</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="k">try</span> <span class="o">{</span>
|
|
<span class="c">// Convert to JSON object if it's a string</span>
|
|
<span class="c"></span> <span class="k">if</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">isString</span><span class="o">(</span><span class="nx">oFullResponse</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="c">// Check for YUI JSON Util</span>
|
|
<span class="c"></span> <span class="k">if</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">JSON</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">oFullResponse</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">JSON</span><span class="o">.</span><span class="nx">parse</span><span class="o">(</span><span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// Look for JSON parsers using an API similar to json2.js</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nb">window</span><span class="o">.</span><span class="nx">JSON</span> <span class="o">&&</span> <span class="nx">JSON</span><span class="o">.</span><span class="nx">parse</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="nx">JSON</span><span class="o">.</span><span class="nx">parse</span><span class="o">(</span><span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// Look for JSON parsers using an API similar to json.js</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oFullResponse</span><span class="o">.</span><span class="nx">parseJSON</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="nx">oFullResponse</span><span class="o">.</span><span class="nx">parseJSON</span><span class="o">();</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// No JSON lib found so parse the string</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
|
|
<span class="c">// Trim leading spaces</span>
|
|
<span class="c"></span> <span class="k">while</span> <span class="o">(</span><span class="nx">oFullResponse</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="nx">oFullResponse</span><span class="o">.</span><span class="nx">charAt</span><span class="o">(</span><span class="m">0</span><span class="o">)</span> <span class="o">!=</span> <span class="s2">"{"</span><span class="o">)</span> <span class="o">&&</span>
|
|
<span class="o">(</span><span class="nx">oFullResponse</span><span class="o">.</span><span class="nx">charAt</span><span class="o">(</span><span class="m">0</span><span class="o">)</span> <span class="o">!=</span> <span class="s2">"["</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="nx">oFullResponse</span><span class="o">.</span><span class="nx">substring</span><span class="o">(</span><span class="m">1</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">.</span><span class="nx">length</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">oFullResponse</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">// Strip extraneous stuff at the end</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">objEnd</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">oFullResponse</span><span class="o">.</span><span class="nx">lastIndexOf</span><span class="o">(</span><span class="s2">"]"</span><span class="o">),</span><span class="nx">oFullResponse</span><span class="o">.</span><span class="nx">lastIndexOf</span><span class="o">(</span><span class="s2">"}"</span><span class="o">));</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="nx">oFullResponse</span><span class="o">.</span><span class="nx">substring</span><span class="o">(</span><span class="m">0</span><span class="o">,</span><span class="nx">objEnd</span><span class="o">+</span><span class="m">1</span><span class="o">);</span>
|
|
|
|
<span class="c">// Turn the string into an object literal...</span>
|
|
<span class="c"></span> <span class="c">// ...eval is necessary here</span>
|
|
<span class="c"></span> <span class="nx">oFullResponse</span> <span class="o">=</span> <span class="nb">eval</span><span class="o">(</span><span class="s2">"("</span> <span class="o">+</span> <span class="nx">oFullResponse</span> <span class="o">+</span> <span class="s2">")"</span><span class="o">);</span>
|
|
|
|
<span class="o">}</span>
|
|
<span class="o">}</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="nx">oFullResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeParseData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="nx">oParsedResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">parseJSONData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="k">break</span><span class="o">;</span>
|
|
<span class="nx">case</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">TYPE_HTMLTABLE</span><span class="o">:</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">xhr</span> <span class="o">&&</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">responseText</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">responseText</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeParseData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="nx">oParsedResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">parseHTMLTableData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="k">break</span><span class="o">;</span>
|
|
<span class="nx">case</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">TYPE_XML</span><span class="o">:</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">xhr</span> <span class="o">&&</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">responseXML</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">responseXML</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeParseData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="nx">oParsedResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">parseXMLData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="k">break</span><span class="o">;</span>
|
|
<span class="nx">case</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">TYPE_TEXT</span><span class="o">:</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">xhr</span> <span class="o">&&</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">responseText</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">responseText</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeParseData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="nx">oParsedResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">parseTextData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oFullResponse</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="c">//var contentType = oRawResponse.getResponseHeader["Content-Type"];</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">"Passing along unknown response type"</span><span class="o">,</span> <span class="s2">"warn"</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="nx">oFullResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeParseData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="nx">oParsedResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeParseData</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oFullResponse</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">oParsedResponse</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">oParsedResponse</span><span class="o">.</span><span class="nx">error</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// Last chance to touch the raw response or the parsed response</span>
|
|
<span class="c"></span> <span class="nx">oParsedResponse</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">doBeforeCallback</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">,</span> <span class="nx">oParsedResponse</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">"responseParseEvent"</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">oParsedResponse</span><span class="o">,</span> <span class="nx">callback</span><span class="o">:</span><span class="nx">oCallback</span><span class="o">,</span> <span class="nx">caller</span><span class="o">:</span><span class="nx">oCaller</span><span class="o">});</span>
|
|
<span class="c">// Cache the response</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">addToCache</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">,</span> <span class="nx">oParsedResponse</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">"dataErrorEvent"</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">oRawResponse</span><span class="o">,</span> <span class="nx">callback</span><span class="o">:</span><span class="nx">oCallback</span><span class="o">,</span>
|
|
<span class="nx">caller</span><span class="o">:</span><span class="nx">oCaller</span><span class="o">,</span> <span class="nx">message</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">DataSource</span><span class="o">.</span><span class="nx">ERROR_DATANULL</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="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">.</span><span class="nx">ERROR_DATANULL</span><span class="o">,</span> <span class="s2">"error"</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">// Be sure the error flag is on</span>
|
|
<span class="c"></span> <span class="nx">oParsedResponse</span> <span class="o">=</span> <span class="nx">oParsedResponse</span> <span class="o">||</span> <span class="o">{};</span>
|
|
<span class="nx">oParsedResponse</span><span class="o">.</span><span class="nx">error</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="c">// Send the response back to the caller</span>
|
|
<span class="c"></span> <span class="nx">oParsedResponse</span><span class="o">.</span><span class="nx">tId</span> <span class="o">=</span> <span class="nx">tId</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">DataSource</span><span class="o">.</span><span class="nx">issueCallback</span><span class="o">(</span><span class="nx">oCallback</span><span class="o">,[</span><span class="nx">oRequest</span><span class="o">,</span><span class="nx">oParsedResponse</span><span class="o">],</span><span class="nx">oParsedResponse</span><span class="o">.</span><span class="nx">error</span><span class="o">,</span><span class="nx">oCaller</span><span class="o">);</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Overridable method gives implementers access to the original full response</span>
|
|
<span class="c"> * before the data gets parsed. Implementers should take care not to return an</span>
|
|
<span class="c"> * unparsable or otherwise invalid response.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method doBeforeParseData</span>
|
|
<span class="c"> * @param oRequest {Object} Request object.</span>
|
|
<span class="c"> * @param oFullResponse {Object} The full response from the live database.</span>
|
|
<span class="c"> * @return {Object} Full response for parsing.</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">doBeforeParseData</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">oFullResponse</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">return</span> <span class="nx">oFullResponse</span><span class="o">;</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Overridable method gives implementers access to the original full response and</span>
|
|
<span class="c"> * the parsed response (parsed against the given schema) before the data</span>
|
|
<span class="c"> * is added to the cache (if applicable) and then sent back to callback function.</span>
|
|
<span class="c"> * This is your chance to access the raw response and/or populate the parsed</span>
|
|
<span class="c"> * response with any custom data.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method doBeforeCallback</span>
|
|
<span class="c"> * @param oRequest {Object} Request object.</span>
|
|
<span class="c"> * @param oFullResponse {Object} The full response from the live database.</span>
|
|
<span class="c"> * @param oParsedResponse {Object} The parsed response to return to calling object.</span>
|
|
<span class="c"> * @return {Object} Parsed response object.</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">doBeforeCallback</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">oFullResponse</span><span class="o">,</span> <span class="nx">oParsedResponse</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">return</span> <span class="nx">oParsedResponse</span><span class="o">;</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Overridable method parses Array data into a response object.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method parseArrayData</span>
|
|
<span class="c"> * @param oRequest {Object} Request object.</span>
|
|
<span class="c"> * @param oFullResponse {Object} The full Array from the live database.</span>
|
|
<span class="c"> * @return {Object} Parsed response object with the following properties:<br></span>
|
|
<span class="c"> * - results (Array) Array of parsed data results<br></span>
|
|
<span class="c"> * - error (Boolean) True if there was an error<br></span>
|
|
<span class="c"> * - totalRecords (Number) Total number of records (if available)</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">parseArrayData</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">oFullResponse</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">if</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">isArray</span><span class="o">(</span><span class="nx">oFullResponse</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="k">if</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">isArray</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">responseSchema</span><span class="o">.</span><span class="nx">fields</span><span class="o">))</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">fields</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">responseSchema</span><span class="o">.</span><span class="nx">fields</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">i</span> <span class="o">=</span> <span class="nx">fields</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">>=</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="k">typeof</span> <span class="nx">fields</span><span class="o">[</span><span class="nx">i</span><span class="o">]</span> <span class="o">!==</span> <span class="s1">'object'</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">fields</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">key</span> <span class="o">:</span> <span class="nx">fields</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="k">var</span> <span class="nx">parsers</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">fields</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">>=</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">var</span> <span class="nx">p</span> <span class="o">=</span> <span class="nx">fields</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">parser</span> <span class="o">||</span> <span class="nx">fields</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">converter</span><span class="o">;</span>
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">p</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">parsers</span><span class="o">[</span><span class="nx">fields</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="nx">p</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="k">var</span> <span class="nx">arrType</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">isArray</span><span class="o">(</span><span class="nx">oFullResponse</span><span class="o">[</span><span class="m">0</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">oFullResponse</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">>-</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">var</span> <span class="nx">oResult</span> <span class="o">=</span> <span class="o">{};</span>
|
|
<span class="k">var</span> <span class="nx">rec</span> <span class="o">=</span> <span class="nx">oFullResponse</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="k">typeof</span> <span class="nx">rec</span> <span class="o">===</span> <span class="s1">'object'</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">fields</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">>-</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">var</span> <span class="nx">field</span> <span class="o">=</span> <span class="nx">fields</span><span class="o">[</span><span class="nx">j</span><span class="o">];</span>
|
|
<span class="k">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="nx">arrType</span> <span class="o">?</span> <span class="nx">rec</span><span class="o">[</span><span class="nx">j</span><span class="o">]</span> <span class="o">:</span> <span class="nx">rec</span><span class="o">[</span><span class="nx">field</span><span class="o">.</span><span class="nx">key</span><span class="o">];</span>
|
|
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">parsers</span><span class="o">[</span><span class="nx">field</span><span class="o">.</span><span class="nx">key</span><span class="o">])</span> <span class="o">{</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="nx">parsers</span><span class="o">[</span><span class="nx">field</span><span class="o">.</span><span class="nx">key</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">data</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="c">// Safety measure</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">data</span> <span class="o">===</span> <span class="kc">undefined</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="nx">oResult</span><span class="o">[</span><span class="nx">field</span><span class="o">.</span><span class="nx">key</span><span class="o">]</span> <span class="o">=</span> <span class="nx">data</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
<span class="nx">results</span><span class="o">[</span><span class="nx">i</span><span class="o">]</span> <span class="o">=</span> <span class="nx">oResult</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="k">var</span> <span class="nx">oParsedResponse</span> <span class="o">=</span> <span class="o">{</span><span class="nx">results</span><span class="o">:</span><span class="nx">results</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">"Parsed array data is "</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">oParsedResponse</span><span class="o">),</span> <span class="s2">"info"</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">oParsedResponse</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">"Array data could not be parsed: "</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">oFullResponse</span><span class="o">),</span>
|
|
<span class="s2">"error"</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"> * Overridable method parses plain text data into a response object.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method parseTextData</span>
|
|
<span class="c"> * @param oRequest {Object} Request object.</span>
|
|
<span class="c"> * @param oFullResponse {Object} The full text response from the live database.</span>
|
|
<span class="c"> * @return {Object} Parsed response object with the following properties:<br></span>
|
|
<span class="c"> * - results (Array) Array of parsed data results<br></span>
|
|
<span class="c"> * - error (Boolean) True if there was an error<br></span>
|
|
<span class="c"> * - totalRecords (Number) Total number of records (if available)</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">parseTextData</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">oFullResponse</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">if</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">isString</span><span class="o">(</span><span class="nx">oFullResponse</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="k">if</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">isArray</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">responseSchema</span><span class="o">.</span><span class="nx">fields</span><span class="o">)</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">isString</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">responseSchema</span><span class="o">.</span><span class="nx">recordDelim</span><span class="o">)</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">isString</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">responseSchema</span><span class="o">.</span><span class="nx">fieldDelim</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">oParsedResponse</span> <span class="o">=</span> <span class="o">{</span><span class="nx">results</span><span class="o">:[]};</span>
|
|
<span class="k">var</span> <span class="nx">recDelim</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">responseSchema</span><span class="o">.</span><span class="nx">recordDelim</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">fieldDelim</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">responseSchema</span><span class="o">.</span><span class="nx">fieldDelim</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">fields</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">responseSchema</span><span class="o">.</span><span class="nx">fields</span><span class="o">;</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">oFullResponse</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">// Delete the last line delimiter at the end of the data if it exists</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">newLength</span> <span class="o">=</span> <span class="nx">oFullResponse</span><span class="o">.</span><span class="nx">length</span><span class="o">-</span><span class="nx">recDelim</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">oFullResponse</span><span class="o">.</span><span class="nx">substr</span><span class="o">(</span><span class="nx">newLength</span><span class="o">)</span> <span class="o">==</span> <span class="nx">recDelim</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">oFullResponse</span> <span class="o">=</span> <span class="nx">oFullResponse</span><span class="o">.</span><span class="nx">substr</span><span class="o">(</span><span class="m">0</span><span class="o">,</span> <span class="nx">newLength</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// Split along record delimiter to get an array of strings</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">recordsarray</span> <span class="o">=</span> <span class="nx">oFullResponse</span><span class="o">.</span><span class="nx">split</span><span class="o">(</span><span class="nx">recDelim</span><span class="o">);</span>
|
|
<span class="c">// Cycle through each record</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">len</span> <span class="o">=</span> <span class="nx">recordsarray</span><span class="o">.</span><span class="nx">length</span><span class="o">,</span> <span class="nx">recIdx</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">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">var</span> <span class="nx">oResult</span> <span class="o">=</span> <span class="o">{};</span>
|
|
<span class="k">var</span> <span class="nx">bError</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
|
|
<span class="k">if</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">isString</span><span class="o">(</span><span class="nx">recordsarray</span><span class="o">[</span><span class="nx">i</span><span class="o">]))</span> <span class="o">{</span>
|
|
<span class="c">// Split each record along field delimiter to get data array</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">fielddataarray</span> <span class="o">=</span> <span class="nx">recordsarray</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">split</span><span class="o">(</span><span class="nx">fieldDelim</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">fields</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">>-</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">try</span> <span class="o">{</span>
|
|
<span class="c">// Remove quotation marks from edges, if applicable</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="nx">fielddataarray</span><span class="o">[</span><span class="nx">j</span><span class="o">];</span>
|
|
<span class="k">if</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">isString</span><span class="o">(</span><span class="nx">data</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">data</span><span class="o">.</span><span class="nx">charAt</span><span class="o">(</span><span class="m">0</span><span class="o">)</span> <span class="o">==</span> <span class="s2">"\""</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="nx">data</span><span class="o">.</span><span class="nx">substr</span><span class="o">(</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">data</span><span class="o">.</span><span class="nx">charAt</span><span class="o">(</span><span class="nx">data</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="s2">"\""</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="nx">data</span><span class="o">.</span><span class="nx">substr</span><span class="o">(</span><span class="m">0</span><span class="o">,</span><span class="nx">data</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">field</span> <span class="o">=</span> <span class="nx">fields</span><span class="o">[</span><span class="nx">j</span><span class="o">];</span>
|
|
<span class="k">var</span> <span class="nx">key</span> <span class="o">=</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">isValue</span><span class="o">(</span><span class="nx">field</span><span class="o">.</span><span class="nx">key</span><span class="o">))</span> <span class="o">?</span> <span class="nx">field</span><span class="o">.</span><span class="nx">key</span> <span class="o">:</span> <span class="nx">field</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">field</span><span class="o">.</span><span class="nx">parser</span> <span class="o">&&</span> <span class="nx">field</span><span class="o">.</span><span class="nx">converter</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">field</span><span class="o">.</span><span class="nx">parser</span> <span class="o">=</span> <span class="nx">field</span><span class="o">.</span><span class="nx">converter</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">"The field property converter has been deprecated"</span> <span class="o">+</span>
|
|
<span class="s2">" in favor of parser"</span><span class="o">,</span> <span class="s2">"warn"</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">if</span><span class="o">(</span><span class="nx">field</span><span class="o">.</span><span class="nx">parser</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="nx">field</span><span class="o">.</span><span class="nx">parser</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">data</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// Safety measure</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">data</span> <span class="o">===</span> <span class="kc">undefined</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="nx">oResult</span><span class="o">[</span><span class="nx">key</span><span class="o">]</span> <span class="o">=</span> <span class="nx">data</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="k">else</span> <span class="o">{</span>
|
|
<span class="nx">bError</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</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="nx">bError</span> <span class="o">=</span> <span class="kc">true</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">bError</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">oParsedResponse</span><span class="o">.</span><span class="nx">results</span><span class="o">[</span><span class="nx">recIdx</span><span class="o">++]</span> <span class="o">=</span> <span class="nx">oResult</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">"Parsed text data is "</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">oParsedResponse</span><span class="o">),</span> <span class="s2">"info"</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">oParsedResponse</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">"Text data could not be parsed: "</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">oFullResponse</span><span class="o">),</span>
|
|
<span class="s2">"error"</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"> * Overridable method parses XML data into a response object.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method parseXMLData</span>
|
|
<span class="c"> * @param oRequest {Object} Request object.</span>
|
|
<span class="c"> * @param oFullResponse {Object} The full XML response from the live database.</span>
|
|
<span class="c"> * @return {Object} Parsed response object with the following properties<br></span>
|
|
<span class="c"> * - results (Array) Array of parsed data results<br></span>
|
|
<span class="c"> * - error (Boolean) True if there was an error<br></span>
|
|
<span class="c"> * - totalRecords (Number) Total number of records (if available)</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">parseXMLData</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">oFullResponse</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">bError</span> <span class="o">=</span> <span class="kc">false</span><span class="o">,</span>
|
|
<span class="nx">schema</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">responseSchema</span><span class="o">,</span>
|
|
<span class="nx">oParsedResponse</span> <span class="o">=</span> <span class="o">{</span><span class="nx">meta</span><span class="o">:{}},</span>
|
|
<span class="nx">xmlList</span> <span class="o">=</span> <span class="kc">null</span><span class="o">,</span>
|
|
<span class="nx">metaNode</span> <span class="o">=</span> <span class="nx">schema</span><span class="o">.</span><span class="nx">metaNode</span><span class="o">,</span>
|
|
<span class="nx">metaLocators</span> <span class="o">=</span> <span class="nx">schema</span><span class="o">.</span><span class="nx">metaFields</span> <span class="o">||</span> <span class="o">{},</span>
|
|
<span class="nx">totRecLocator</span> <span class="o">=</span> <span class="nx">schema</span><span class="o">.</span><span class="nx">totalRecords</span><span class="o">,</span> <span class="c">// Back compat</span>
|
|
<span class="c"></span> <span class="nx">i</span><span class="o">,</span><span class="nx">k</span><span class="o">,</span><span class="nx">loc</span><span class="o">,</span><span class="nx">v</span><span class="o">;</span>
|
|
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">totRecLocator</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">metaLocators</span><span class="o">.</span><span class="nx">totalRecords</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">metaLocators</span><span class="o">.</span><span class="nx">totalRecords</span> <span class="o">=</span> <span class="nx">totRecLocator</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="c">// In case oFullResponse is something funky</span>
|
|
<span class="c"></span> <span class="k">try</span> <span class="o">{</span>
|
|
<span class="nx">xmlList</span> <span class="o">=</span> <span class="o">(</span><span class="nx">schema</span><span class="o">.</span><span class="nx">resultNode</span><span class="o">)</span> <span class="o">?</span>
|
|
<span class="nx">oFullResponse</span><span class="o">.</span><span class="nx">getElementsByTagName</span><span class="o">(</span><span class="nx">schema</span><span class="o">.</span><span class="nx">resultNode</span><span class="o">)</span> <span class="o">:</span>
|
|
<span class="kc">null</span><span class="o">;</span>
|
|
|
|
<span class="c">// Pull any meta identified</span>
|
|
<span class="c"></span> <span class="nx">metaNode</span> <span class="o">=</span> <span class="nx">metaNode</span> <span class="o">?</span> <span class="nx">oFullResponse</span><span class="o">.</span><span class="nx">getElementsByTagName</span><span class="o">(</span><span class="nx">metaNode</span><span class="o">)[</span><span class="m">0</span><span class="o">]</span> <span class="o">:</span>
|
|
<span class="nx">oFullResponse</span><span class="o">;</span>
|
|
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">metaNode</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">for</span> <span class="o">(</span><span class="nx">k</span> <span class="k">in</span> <span class="nx">metaLocators</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">if</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">hasOwnProperty</span><span class="o">(</span><span class="nx">metaLocators</span><span class="o">,</span> <span class="nx">k</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">loc</span> <span class="o">=</span> <span class="nx">metaLocators</span><span class="o">[</span><span class="nx">k</span><span class="o">];</span>
|
|
<span class="c">// Look for a node</span>
|
|
<span class="c"></span> <span class="nx">v</span> <span class="o">=</span> <span class="nx">metaNode</span><span class="o">.</span><span class="nx">getElementsByTagName</span><span class="o">(</span><span class="nx">loc</span><span class="o">)[</span><span class="m">0</span><span class="o">];</span>
|
|
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">v</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">v</span> <span class="o">=</span> <span class="nx">v</span><span class="o">.</span><span class="nx">firstChild</span><span class="o">.</span><span class="nx">nodeValue</span><span class="o">;</span>
|
|
<span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
|
|
<span class="c">// Look for an attribute</span>
|
|
<span class="c"></span> <span class="nx">v</span> <span class="o">=</span> <span class="nx">metaNode</span><span class="o">.</span><span class="nx">attributes</span><span class="o">.</span><span class="nx">getNamedItem</span><span class="o">(</span><span class="nx">loc</span><span class="o">);</span>
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">v</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">v</span> <span class="o">=</span> <span class="nx">v</span><span class="o">.</span><span class="nx">value</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">YAHOO</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">v</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">oParsedResponse</span><span class="o">.</span><span class="nx">meta</span><span class="o">[</span><span class="nx">k</span><span class="o">]</span> <span class="o">=</span> <span class="nx">v</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">catch</span><span class="o">(</span><span class="nx">e</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">"Error while parsing XML data: "</span> <span class="o">+</span> <span class="nx">e</span><span class="o">.</span><span class="nx">message</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
<span class="k">if</span><span class="o">(!</span><span class="nx">xmlList</span> <span class="o">||</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">isArray</span><span class="o">(</span><span class="nx">schema</span><span class="o">.</span><span class="nx">fields</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">bError</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// Loop through each result</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
|
|
|
|
<span class="nx">oParsedResponse</span><span class="o">.</span><span class="nx">results</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">xmlList</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">>=</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">var</span> <span class="nx">result</span> <span class="o">=</span> <span class="nx">xmlList</span><span class="o">.</span><span class="nx">item</span><span class="o">(</span><span class="nx">i</span><span class="o">);</span>
|
|
<span class="k">var</span> <span class="nx">oResult</span> <span class="o">=</span> <span class="o">{};</span>
|
|
<span class="c">// Loop through each data field in each result using the schema</span>
|
|
<span class="c"></span> <span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">m</span> <span class="o">=</span> <span class="nx">schema</span><span class="o">.</span><span class="nx">fields</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">m</span> <span class="o">>=</span> <span class="m">0</span> <span class="o">;</span> <span class="nx">m</span><span class="o">--)</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">field</span> <span class="o">=</span> <span class="nx">schema</span><span class="o">.</span><span class="nx">fields</span><span class="o">[</span><span class="nx">m</span><span class="o">];</span>
|
|
<span class="k">var</span> <span class="nx">key</span> <span class="o">=</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">isValue</span><span class="o">(</span><span class="nx">field</span><span class="o">.</span><span class="nx">key</span><span class="o">))</span> <span class="o">?</span> <span class="nx">field</span><span class="o">.</span><span class="nx">key</span> <span class="o">:</span> <span class="nx">field</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
<span class="c">// Values may be held in an attribute...</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">xmlAttr</span> <span class="o">=</span> <span class="nx">result</span><span class="o">.</span><span class="nx">attributes</span><span class="o">.</span><span class="nx">getNamedItem</span><span class="o">(</span><span class="nx">key</span><span class="o">);</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">xmlAttr</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="nx">xmlAttr</span><span class="o">.</span><span class="nx">value</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// ...or in a node</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">xmlNode</span> <span class="o">=</span> <span class="nx">result</span><span class="o">.</span><span class="nx">getElementsByTagName</span><span class="o">(</span><span class="nx">key</span><span class="o">);</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">xmlNode</span> <span class="o">&&</span> <span class="nx">xmlNode</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="o">&&</span> <span class="nx">xmlNode</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">firstChild</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="nx">xmlNode</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">firstChild</span><span class="o">.</span><span class="nx">nodeValue</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="k">else</span> <span class="o">{</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="s2">""</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">if</span><span class="o">(!</span><span class="nx">field</span><span class="o">.</span><span class="nx">parser</span> <span class="o">&&</span> <span class="nx">field</span><span class="o">.</span><span class="nx">converter</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">field</span><span class="o">.</span><span class="nx">parser</span> <span class="o">=</span> <span class="nx">field</span><span class="o">.</span><span class="nx">converter</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">"The field property converter has been deprecated"</span> <span class="o">+</span>
|
|
<span class="s2">" in favor of parser"</span><span class="o">,</span> <span class="s2">"warn"</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">if</span><span class="o">(</span><span class="nx">field</span><span class="o">.</span><span class="nx">parser</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="nx">field</span><span class="o">.</span><span class="nx">parser</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">data</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// Safety measure</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">data</span> <span class="o">===</span> <span class="kc">undefined</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="nx">oResult</span><span class="o">[</span><span class="nx">key</span><span class="o">]</span> <span class="o">=</span> <span class="nx">data</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// Capture each array of values into an array of results</span>
|
|
<span class="c"></span> <span class="nx">oParsedResponse</span><span class="o">.</span><span class="nx">results</span><span class="o">[</span><span class="nx">i</span><span class="o">]</span> <span class="o">=</span> <span class="nx">oResult</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">bError</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">"XML data could not be parsed: "</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">oFullResponse</span><span class="o">),</span> <span class="s2">"error"</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="nx">oParsedResponse</span><span class="o">.</span><span class="nx">error</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="o">{</span>
|
|
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">"Parsed XML data is "</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">oParsedResponse</span><span class="o">),</span> <span class="s2">"info"</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">oParsedResponse</span><span class="o">;</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Overridable method parses JSON data into a response object.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method parseJSONData</span>
|
|
<span class="c"> * @param oRequest {Object} Request object.</span>
|
|
<span class="c"> * @param oFullResponse {Object} The full JSON from the live database.</span>
|
|
<span class="c"> * @return {Object} Parsed response object with the following properties<br></span>
|
|
<span class="c"> * - results (Array) Array of parsed data results<br></span>
|
|
<span class="c"> * - error (Boolean) True if there was an error<br></span>
|
|
<span class="c"> * - totalRecords (Number) Total number of records (if available)</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">parseJSONData</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">oFullResponse</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">oParsedResponse</span> <span class="o">=</span> <span class="o">{</span><span class="nx">results</span><span class="o">:[],</span><span class="nx">meta</span><span class="o">:{}},</span>
|
|
<span class="nx">schema</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">responseSchema</span><span class="o">;</span>
|
|
|
|
<span class="k">if</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">isObject</span><span class="o">(</span><span class="nx">oFullResponse</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="k">if</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">isArray</span><span class="o">(</span><span class="nx">schema</span><span class="o">.</span><span class="nx">fields</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">fields</span> <span class="o">=</span> <span class="nx">schema</span><span class="o">.</span><span class="nx">fields</span><span class="o">,</span>
|
|
<span class="nx">resultsList</span> <span class="o">=</span> <span class="nx">oFullResponse</span><span class="o">,</span>
|
|
<span class="nx">results</span> <span class="o">=</span> <span class="o">[],</span>
|
|
<span class="nx">metaFields</span> <span class="o">=</span> <span class="nx">schema</span><span class="o">.</span><span class="nx">metaFields</span> <span class="o">||</span> <span class="o">{},</span>
|
|
<span class="nx">fieldParsers</span> <span class="o">=</span> <span class="o">[],</span>
|
|
<span class="nx">fieldPaths</span> <span class="o">=</span> <span class="o">[],</span>
|
|
<span class="nx">simpleFields</span> <span class="o">=</span> <span class="o">[],</span>
|
|
<span class="nx">bError</span> <span class="o">=</span> <span class="kc">false</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="nx">j</span><span class="o">,</span><span class="nx">v</span><span class="o">,</span><span class="nx">key</span><span class="o">,</span><span class="nx">parser</span><span class="o">,</span><span class="nx">path</span><span class="o">;</span>
|
|
|
|
<span class="c">// Function to parse the schema's locator keys into walk paths</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">buildPath</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">needle</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">path</span> <span class="o">=</span> <span class="kc">null</span><span class="o">,</span> <span class="nx">keys</span> <span class="o">=</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="k">if</span> <span class="o">(</span><span class="nx">needle</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// Strip the ["string keys"] and [1] array indexes</span>
|
|
<span class="c"></span> <span class="nx">needle</span> <span class="o">=</span> <span class="nx">needle</span><span class="o">.</span>
|
|
<span class="nx">replace</span><span class="o">(</span><span class="sr">/\[(['"])(.*?)\1\]/g</span><span class="o">,</span>
|
|
<span class="k">function</span> <span class="o">(</span><span class="nx">x</span><span class="o">,</span><span class="nx">$1</span><span class="o">,</span><span class="nx">$2</span><span class="o">)</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">$2</span><span class="o">;</span><span class="k">return</span> <span class="s1">'.@'</span><span class="o">+(</span><span class="nx">i</span><span class="o">++);}).</span>
|
|
<span class="nx">replace</span><span class="o">(</span><span class="sr">/\[(\d+)\]/g</span><span class="o">,</span>
|
|
<span class="k">function</span> <span class="o">(</span><span class="nx">x</span><span class="o">,</span><span class="nx">$1</span><span class="o">)</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="nb">parseInt</span><span class="o">(</span><span class="nx">$1</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="k">return</span> <span class="s1">'.@'</span><span class="o">+(</span><span class="nx">i</span><span class="o">++);}).</span>
|
|
<span class="nx">replace</span><span class="o">(</span><span class="sr">/^\./</span><span class="o">,</span><span class="s1">''</span><span class="o">);</span> <span class="c">// remove leading dot</span>
|
|
<span class="c"></span>
|
|
<span class="c">// If the cleaned needle contains invalid characters, the</span>
|
|
<span class="c"></span> <span class="c">// path is invalid</span>
|
|
<span class="c"></span> <span class="k">if</span> <span class="o">(!</span><span class="sr">/[^\w\.\$@]/</span><span class="o">.</span><span class="nx">test</span><span class="o">(</span><span class="nx">needle</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">path</span> <span class="o">=</span> <span class="nx">needle</span><span class="o">.</span><span class="nx">split</span><span class="o">(</span><span class="s1">'.'</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">path</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">>=</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">path</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">charAt</span><span class="o">(</span><span class="m">0</span><span class="o">)</span> <span class="o">===</span> <span class="s1">'@'</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">path</span><span class="o">[</span><span class="nx">i</span><span class="o">]</span> <span class="o">=</span> <span class="nx">keys</span><span class="o">[</span><span class="nb">parseInt</span><span class="o">(</span><span class="nx">path</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">substr</span><span class="o">(</span><span class="m">1</span><span class="o">),</span><span class="m">10</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="nx">path</span><span class="o">;</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">// build function to walk a path and return the pot of gold</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">walkPath</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">path</span><span class="o">,</span> <span class="nx">origin</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">v</span><span class="o">=</span><span class="nx">origin</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">path</span><span class="o">.</span><span class="nx">length</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">len</span> <span class="o">&&</span> <span class="nx">v</span><span class="o">;++</span><span class="nx">i</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">v</span> <span class="o">=</span> <span class="nx">v</span><span class="o">[</span><span class="nx">path</span><span class="o">[</span><span class="nx">i</span><span class="o">]];</span>
|
|
<span class="o">}</span>
|
|
<span class="k">return</span> <span class="nx">v</span><span class="o">;</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">// Build the parser map and location paths</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">fields</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">>=</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">key</span> <span class="o">=</span> <span class="nx">fields</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="nx">fields</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
|
|
<span class="nx">parser</span> <span class="o">=</span> <span class="nx">fields</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">parser</span> <span class="o">||</span> <span class="nx">fields</span><span class="o">[</span><span class="nx">i</span><span class="o">].</span><span class="nx">converter</span><span class="o">;</span>
|
|
<span class="nx">path</span> <span class="o">=</span> <span class="nx">buildPath</span><span class="o">(</span><span class="nx">key</span><span class="o">);</span>
|
|
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">parser</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">fieldParsers</span><span class="o">[</span><span class="nx">fieldParsers</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="o">{</span><span class="nx">key</span><span class="o">:</span><span class="nx">key</span><span class="o">,</span><span class="nx">parser</span><span class="o">:</span><span class="nx">parser</span><span class="o">};</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">path</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">path</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">fieldPaths</span><span class="o">[</span><span class="nx">fieldPaths</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="o">{</span><span class="nx">key</span><span class="o">:</span><span class="nx">key</span><span class="o">,</span><span class="nx">path</span><span class="o">:</span><span class="nx">path</span><span class="o">};</span>
|
|
<span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
|
|
<span class="nx">simpleFields</span><span class="o">[</span><span class="nx">simpleFields</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">key</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">"Invalid key syntax: "</span> <span class="o">+</span> <span class="nx">key</span><span class="o">,</span><span class="s2">"warn"</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">// Parse the response</span>
|
|
<span class="c"></span> <span class="c">// Step 1. Pull the resultsList from oFullResponse (default assumes</span>
|
|
<span class="c"></span> <span class="c">// oFullResponse IS the resultsList)</span>
|
|
<span class="c"></span> <span class="k">if</span> <span class="o">(</span><span class="nx">schema</span><span class="o">.</span><span class="nx">resultsList</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">path</span> <span class="o">=</span> <span class="nx">buildPath</span><span class="o">(</span><span class="nx">schema</span><span class="o">.</span><span class="nx">resultsList</span><span class="o">);</span>
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">path</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">resultsList</span> <span class="o">=</span> <span class="nx">walkPath</span><span class="o">(</span><span class="nx">path</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">resultsList</span> <span class="o">===</span> <span class="kc">undefined</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">bError</span> <span class="o">=</span> <span class="kc">true</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">bError</span> <span class="o">=</span> <span class="kc">true</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">resultsList</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">resultsList</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">YAHOO</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">resultsList</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">resultsList</span> <span class="o">=</span> <span class="o">[</span><span class="nx">resultsList</span><span class="o">];</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="k">if</span> <span class="o">(!</span><span class="nx">bError</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// Step 2. Process the results, flattening the records and/or</span>
|
|
<span class="c"></span> <span class="c">// applying parsers if needed</span>
|
|
<span class="c"></span> <span class="c">//if (fieldParsers.length || fieldPaths.length) {</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">resultsList</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">>=</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">var</span> <span class="nx">r</span> <span class="o">=</span> <span class="nx">resultsList</span><span class="o">[</span><span class="nx">i</span><span class="o">],</span> <span class="nx">rec</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">simpleFields</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">>=</span> <span class="m">0</span><span class="o">;</span> <span class="o">--</span><span class="nx">j</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">rec</span><span class="o">[</span><span class="nx">simpleFields</span><span class="o">[</span><span class="nx">j</span><span class="o">]]</span> <span class="o">=</span> <span class="nx">r</span><span class="o">[</span><span class="nx">simpleFields</span><span class="o">[</span><span class="nx">j</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">fieldPaths</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">>=</span> <span class="m">0</span><span class="o">;</span> <span class="o">--</span><span class="nx">j</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">rec</span><span class="o">[</span><span class="nx">fieldPaths</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">key</span><span class="o">]</span> <span class="o">=</span> <span class="nx">walkPath</span><span class="o">(</span><span class="nx">fieldPaths</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">path</span><span class="o">,</span><span class="nx">r</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">fieldParsers</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">>=</span> <span class="m">0</span><span class="o">;</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">p</span> <span class="o">=</span> <span class="nx">fieldParsers</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">key</span><span class="o">;</span>
|
|
<span class="nx">rec</span><span class="o">[</span><span class="nx">p</span><span class="o">]</span> <span class="o">=</span> <span class="nx">fieldParsers</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">parser</span><span class="o">(</span><span class="nx">rec</span><span class="o">[</span><span class="nx">p</span><span class="o">]);</span>
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">rec</span><span class="o">[</span><span class="nx">p</span><span class="o">]</span> <span class="o">===</span> <span class="kc">undefined</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">rec</span><span class="o">[</span><span class="nx">p</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="nx">results</span><span class="o">[</span><span class="nx">i</span><span class="o">]</span> <span class="o">=</span> <span class="nx">rec</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="c">//}</span>
|
|
<span class="c"></span>
|
|
<span class="c">// Step 3. Pull meta fields from oFullResponse if identified</span>
|
|
<span class="c"></span> <span class="k">if</span> <span class="o">(</span><span class="nx">schema</span><span class="o">.</span><span class="nx">totalRecords</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">metaFields</span><span class="o">.</span><span class="nx">totalRecords</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// for backward compatibility</span>
|
|
<span class="c"></span> <span class="nx">metaFields</span><span class="o">.</span><span class="nx">totalRecords</span> <span class="o">=</span> <span class="nx">schema</span><span class="o">.</span><span class="nx">totalRecords</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="k">for</span> <span class="o">(</span><span class="nx">key</span> <span class="k">in</span> <span class="nx">metaFields</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">if</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">hasOwnProperty</span><span class="o">(</span><span class="nx">metaFields</span><span class="o">,</span><span class="nx">key</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">path</span> <span class="o">=</span> <span class="nx">buildPath</span><span class="o">(</span><span class="nx">metaFields</span><span class="o">[</span><span class="nx">key</span><span class="o">]);</span>
|
|
<span class="k">if</span> <span class="o">(</span><span class="nx">path</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">v</span> <span class="o">=</span> <span class="nx">walkPath</span><span class="o">(</span><span class="nx">path</span><span class="o">,</span> <span class="nx">oFullResponse</span><span class="o">);</span>
|
|
<span class="nx">oParsedResponse</span><span class="o">.</span><span class="nx">meta</span><span class="o">[</span><span class="nx">key</span><span class="o">]</span> <span class="o">=</span> <span class="nx">v</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">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">"JSON data could not be parsed: "</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">oFullResponse</span><span class="o">),</span> <span class="s2">"error"</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="nx">oParsedResponse</span><span class="o">.</span><span class="nx">error</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="nx">oParsedResponse</span><span class="o">.</span><span class="nx">results</span> <span class="o">=</span> <span class="nx">results</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">"JSON data could not be parsed: "</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">oFullResponse</span><span class="o">),</span> <span class="s2">"error"</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="nx">oParsedResponse</span><span class="o">.</span><span class="nx">error</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="k">return</span> <span class="nx">oParsedResponse</span><span class="o">;</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Overridable method parses an HTML TABLE element reference into a response object.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method parseHTMLTableData</span>
|
|
<span class="c"> * @param oRequest {Object} Request object.</span>
|
|
<span class="c"> * @param oFullResponse {Object} The full HTML element reference from the live database.</span>
|
|
<span class="c"> * @return {Object} Parsed response object with the following properties<br></span>
|
|
<span class="c"> * - results (Array) Array of parsed data results<br></span>
|
|
<span class="c"> * - error (Boolean) True if there was an error<br></span>
|
|
<span class="c"> * - totalRecords (Number) Total number of records (if available)</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">DataSource</span><span class="o">.</span><span class="nx">prototype</span><span class="o">.</span><span class="nx">parseHTMLTableData</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">oFullResponse</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">bError</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">elTable</span> <span class="o">=</span> <span class="nx">oFullResponse</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">fields</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">responseSchema</span><span class="o">.</span><span class="nx">fields</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">oParsedResponse</span> <span class="o">=</span> <span class="o">{</span><span class="nx">results</span><span class="o">:[]};</span>
|
|
|
|
<span class="c">// Iterate through each TBODY</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"><</span><span class="nx">elTable</span><span class="o">.</span><span class="nx">tBodies</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">elTbody</span> <span class="o">=</span> <span class="nx">elTable</span><span class="o">.</span><span class="nx">tBodies</span><span class="o">[</span><span class="nx">i</span><span class="o">];</span>
|
|
|
|
<span class="c">// Iterate through each TR</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">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="nx">j</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="o">{</span>
|
|
<span class="k">var</span> <span class="nx">elRow</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">j</span><span class="o">];</span>
|
|
<span class="k">var</span> <span class="nx">oResult</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">k</span><span class="o">=</span><span class="nx">fields</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">k</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="o">{</span>
|
|
<span class="k">var</span> <span class="nx">field</span> <span class="o">=</span> <span class="nx">fields</span><span class="o">[</span><span class="nx">k</span><span class="o">];</span>
|
|
<span class="k">var</span> <span class="nx">key</span> <span class="o">=</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">isValue</span><span class="o">(</span><span class="nx">field</span><span class="o">.</span><span class="nx">key</span><span class="o">))</span> <span class="o">?</span> <span class="nx">field</span><span class="o">.</span><span class="nx">key</span> <span class="o">:</span> <span class="nx">field</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">data</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">k</span><span class="o">].</span><span class="nx">innerHTML</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">field</span><span class="o">.</span><span class="nx">parser</span> <span class="o">&&</span> <span class="nx">field</span><span class="o">.</span><span class="nx">converter</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">field</span><span class="o">.</span><span class="nx">parser</span> <span class="o">=</span> <span class="nx">field</span><span class="o">.</span><span class="nx">converter</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">"The field property converter has been deprecated"</span> <span class="o">+</span>
|
|
<span class="s2">" in favor of parser"</span><span class="o">,</span> <span class="s2">"warn"</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">if</span><span class="o">(</span><span class="nx">field</span><span class="o">.</span><span class="nx">parser</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="nx">field</span><span class="o">.</span><span class="nx">parser</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">data</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// Safety measure</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">data</span> <span class="o">===</span> <span class="kc">undefined</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="nx">oResult</span><span class="o">[</span><span class="nx">key</span><span class="o">]</span> <span class="o">=</span> <span class="nx">data</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="nx">oParsedResponse</span><span class="o">.</span><span class="nx">results</span><span class="o">[</span><span class="nx">j</span><span class="o">]</span> <span class="o">=</span> <span class="nx">oResult</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">bError</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">"HTML TABLE data could not be parsed: "</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">oFullResponse</span><span class="o">),</span> <span class="s2">"error"</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="nx">oParsedResponse</span><span class="o">.</span><span class="nx">error</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="o">{</span>
|
|
<span class="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">"Parsed HTML TABLE data is "</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">oParsedResponse</span><span class="o">),</span> <span class="s2">"info"</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">oParsedResponse</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"> * The static Number class provides helper functions to deal with data of type</span>
|
|
<span class="c"> * Number.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @namespace YAHOO.util</span>
|
|
<span class="c"> * @requires datasource</span>
|
|
<span class="c"> * @class Number</span>
|
|
<span class="c"> * @static</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="nb">Number</span> <span class="o">=</span> <span class="o">{</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Takes a native JavaScript Number and formats to string for display to user.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method format</span>
|
|
<span class="c"> * @param nData {Number} Number.</span>
|
|
<span class="c"> * @param oConfig {Object} (Optional) Optional configuration values:</span>
|
|
<span class="c"> * <dl></span>
|
|
<span class="c"> * <dt>prefix {String}</dd></span>
|
|
<span class="c"> * <dd>String prepended before each number, like a currency designator "$"</dd></span>
|
|
<span class="c"> * <dt>decimalPlaces {Number}</dd></span>
|
|
<span class="c"> * <dd>Number of decimal places to round.</dd></span>
|
|
<span class="c"> * <dt>decimalSeparator {String}</dd></span>
|
|
<span class="c"> * <dd>Decimal separator</dd></span>
|
|
<span class="c"> * <dt>thousandsSeparator {String}</dd></span>
|
|
<span class="c"> * <dd>Thousands separator</dd></span>
|
|
<span class="c"> * <dt>suffix {String}</dd></span>
|
|
<span class="c"> * <dd>String appended after each number, like " items" (note the space)</dd></span>
|
|
<span class="c"> * </dl></span>
|
|
<span class="c"> * @return {String} Formatted number for display.</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">format</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">nData</span><span class="o">,</span> <span class="nx">oConfig</span><span class="o">)</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="o">{};</span>
|
|
|
|
<span class="k">if</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">isNumber</span><span class="o">(</span><span class="nx">nData</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">nData</span> <span class="o">*=</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">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">nData</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">sOutput</span> <span class="o">=</span> <span class="nx">nData</span> <span class="o">+</span> <span class="s2">""</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">sDecimalSeparator</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oConfig</span><span class="o">.</span><span class="nx">decimalSeparator</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oConfig</span><span class="o">.</span><span class="nx">decimalSeparator</span> <span class="o">:</span> <span class="s2">"."</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">nDotIndex</span><span class="o">;</span>
|
|
|
|
<span class="c">// Manage decimals</span>
|
|
<span class="c"></span> <span class="k">if</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">isNumber</span><span class="o">(</span><span class="nx">oConfig</span><span class="o">.</span><span class="nx">decimalPlaces</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="c">// Round to the correct decimal place</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">nDecimalPlaces</span> <span class="o">=</span> <span class="nx">oConfig</span><span class="o">.</span><span class="nx">decimalPlaces</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">nDecimal</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">pow</span><span class="o">(</span><span class="m">10</span><span class="o">,</span> <span class="nx">nDecimalPlaces</span><span class="o">);</span>
|
|
<span class="nx">sOutput</span> <span class="o">=</span> <span class="nb">Math</span><span class="o">.</span><span class="nx">round</span><span class="o">(</span><span class="nx">nData</span><span class="o">*</span><span class="nx">nDecimal</span><span class="o">)/</span><span class="nx">nDecimal</span> <span class="o">+</span> <span class="s2">""</span><span class="o">;</span>
|
|
<span class="nx">nDotIndex</span> <span class="o">=</span> <span class="nx">sOutput</span><span class="o">.</span><span class="nx">lastIndexOf</span><span class="o">(</span><span class="s2">"."</span><span class="o">);</span>
|
|
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">nDecimalPlaces</span> <span class="o">></span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// Add the decimal separator</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">nDotIndex</span> <span class="o"><</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">sOutput</span> <span class="o">+=</span> <span class="nx">sDecimalSeparator</span><span class="o">;</span>
|
|
<span class="nx">nDotIndex</span> <span class="o">=</span> <span class="nx">sOutput</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">// Replace the "."</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">sDecimalSeparator</span> <span class="o">!==</span> <span class="s2">"."</span><span class="o">){</span>
|
|
<span class="nx">sOutput</span> <span class="o">=</span> <span class="nx">sOutput</span><span class="o">.</span><span class="nx">replace</span><span class="o">(</span><span class="s2">"."</span><span class="o">,</span><span class="nx">sDecimalSeparator</span><span class="o">);</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// Add missing zeros</span>
|
|
<span class="c"></span> <span class="k">while</span><span class="o">((</span><span class="nx">sOutput</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">nDotIndex</span><span class="o">)</span> <span class="o"><</span> <span class="nx">nDecimalPlaces</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">sOutput</span> <span class="o">+=</span> <span class="s2">"0"</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="c">// Add the thousands separator</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oConfig</span><span class="o">.</span><span class="nx">thousandsSeparator</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">sThousandsSeparator</span> <span class="o">=</span> <span class="nx">oConfig</span><span class="o">.</span><span class="nx">thousandsSeparator</span><span class="o">;</span>
|
|
<span class="nx">nDotIndex</span> <span class="o">=</span> <span class="nx">sOutput</span><span class="o">.</span><span class="nx">lastIndexOf</span><span class="o">(</span><span class="nx">sDecimalSeparator</span><span class="o">);</span>
|
|
<span class="nx">nDotIndex</span> <span class="o">=</span> <span class="o">(</span><span class="nx">nDotIndex</span> <span class="o">></span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">?</span> <span class="nx">nDotIndex</span> <span class="o">:</span> <span class="nx">sOutput</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">sNewOutput</span> <span class="o">=</span> <span class="nx">sOutput</span><span class="o">.</span><span class="nx">substring</span><span class="o">(</span><span class="nx">nDotIndex</span><span class="o">);</span>
|
|
<span class="k">var</span> <span class="nx">nCount</span> <span class="o">=</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="k">var</span> <span class="nx">i</span><span class="o">=</span><span class="nx">nDotIndex</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">--)</span> <span class="o">{</span>
|
|
<span class="nx">nCount</span><span class="o">++;</span>
|
|
<span class="k">if</span> <span class="o">((</span><span class="nx">nCount</span><span class="o">%</span><span class="m">3</span> <span class="o">===</span> <span class="m">0</span><span class="o">)</span> <span class="o">&&</span> <span class="o">(</span><span class="nx">i</span> <span class="o">!==</span> <span class="nx">nDotIndex</span><span class="o">))</span> <span class="o">{</span>
|
|
<span class="nx">sNewOutput</span> <span class="o">=</span> <span class="nx">sThousandsSeparator</span> <span class="o">+</span> <span class="nx">sNewOutput</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="nx">sNewOutput</span> <span class="o">=</span> <span class="nx">sOutput</span><span class="o">.</span><span class="nx">charAt</span><span class="o">(</span><span class="nx">i</span><span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">+</span> <span class="nx">sNewOutput</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="nx">sOutput</span> <span class="o">=</span> <span class="nx">sNewOutput</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="c">// Prepend prefix</span>
|
|
<span class="c"></span> <span class="nx">sOutput</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oConfig</span><span class="o">.</span><span class="nx">prefix</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oConfig</span><span class="o">.</span><span class="nx">prefix</span> <span class="o">+</span> <span class="nx">sOutput</span> <span class="o">:</span> <span class="nx">sOutput</span><span class="o">;</span>
|
|
|
|
<span class="c">// Append suffix</span>
|
|
<span class="c"></span> <span class="nx">sOutput</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oConfig</span><span class="o">.</span><span class="nx">suffix</span><span class="o">)</span> <span class="o">?</span> <span class="nx">sOutput</span> <span class="o">+</span> <span class="nx">oConfig</span><span class="o">.</span><span class="nx">suffix</span> <span class="o">:</span> <span class="nx">sOutput</span><span class="o">;</span>
|
|
|
|
<span class="k">return</span> <span class="nx">sOutput</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// Still not a Number, just return unaltered</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
|
|
<span class="k">return</span> <span class="nx">nData</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"> * The static Date class provides helper functions to deal with data of type</span>
|
|
<span class="c"> * Number.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @namespace YAHOO.util</span>
|
|
<span class="c"> * @requires datasource</span>
|
|
<span class="c"> * @class Date</span>
|
|
<span class="c"> * @static</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="nb">Date</span> <span class="o">=</span> <span class="o">{</span>
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Takes a native JavaScript Date and formats to string for display to user.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method format</span>
|
|
<span class="c"> * @param oDate {Date} Date.</span>
|
|
<span class="c"> * @param oConfig {Object} (Optional) Optional configuration values:</span>
|
|
<span class="c"> * <dl></span>
|
|
<span class="c"> * <dt>format {String}</dd></span>
|
|
<span class="c"> * <dd>Currently only the following formats are supported:</span>
|
|
<span class="c"> * "MM/DD/YYYY", "YYYY/MM/DD", or "DD/MM/YYYY"</dd></span>
|
|
<span class="c"> * </dl></span>
|
|
<span class="c"> * @return {String} Formatted date for display.</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">format</span><span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">oDate</span><span class="o">,</span> <span class="nx">oConfig</span><span class="o">)</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="o">{};</span>
|
|
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">oDate</span> <span class="k">instanceof</span> <span class="nb">Date</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">format</span> <span class="o">=</span> <span class="nx">oConfig</span><span class="o">.</span><span class="nx">format</span> <span class="o">||</span> <span class="s2">"MM/DD/YYYY"</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">mm</span> <span class="o">=</span> <span class="nx">oDate</span><span class="o">.</span><span class="nx">getMonth</span><span class="o">()+</span><span class="m">1</span><span class="o">;</span>
|
|
<span class="k">var</span> <span class="nx">dd</span> <span class="o">=</span> <span class="nx">oDate</span><span class="o">.</span><span class="nx">getDate</span><span class="o">();</span>
|
|
<span class="k">var</span> <span class="nx">yyyy</span> <span class="o">=</span> <span class="nx">oDate</span><span class="o">.</span><span class="nx">getFullYear</span><span class="o">();</span>
|
|
|
|
<span class="nx">switch</span><span class="o">(</span><span class="nx">format</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">case</span> <span class="s2">"YYYY/MM/DD"</span><span class="o">:</span>
|
|
<span class="k">return</span> <span class="nx">yyyy</span> <span class="o">+</span> <span class="s2">"/"</span> <span class="o">+</span> <span class="nx">mm</span> <span class="o">+</span><span class="s2">"/"</span> <span class="o">+</span> <span class="nx">dd</span><span class="o">;</span>
|
|
<span class="nx">case</span> <span class="s2">"DD/MM/YYYY"</span><span class="o">:</span>
|
|
<span class="k">return</span> <span class="nx">dd</span> <span class="o">+</span> <span class="s2">"/"</span> <span class="o">+</span> <span class="nx">mm</span> <span class="o">+</span> <span class="s2">"/"</span> <span class="o">+</span> <span class="nx">yyyy</span><span class="o">;</span>
|
|
<span class="nx">default</span><span class="o">:</span> <span class="c">// "MM/DD/YYYY"</span>
|
|
<span class="c"></span> <span class="k">return</span> <span class="nx">mm</span> <span class="o">+</span> <span class="s2">"/"</span> <span class="o">+</span> <span class="nx">dd</span> <span class="o">+</span> <span class="s2">"/"</span> <span class="o">+</span> <span class="nx">yyyy</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">return</span> <span class="nx">YAHOO</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">oDate</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oDate</span> <span class="o">:</span> <span class="s2">""</span><span class="o">;</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_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="selected"><a href="module_datasource.html">datasource</a></li>
|
|
|
|
<li class=""><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_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.DataSource.html">YAHOO.util.DataSource</a></li>
|
|
<li class=""><a href="YAHOO.util.Date.html">YAHOO.util.Date</a></li>
|
|
<li class=""><a href="YAHOO.util.Number.html">YAHOO.util.Number</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="module">
|
|
<h4>Files</h4>
|
|
<ul class="content">
|
|
<li class="selected"><a href="DataSource.js.html">DataSource.js</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="ft">
|
|
<hr />
|
|
Copyright © 2007 Yahoo! Inc. All rights reserved.
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|