data tables are going to need some work yet, but the other stuff seems to be working 100%
2559 lines
288 KiB
HTML
2559 lines
288 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.6.0</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" /> <label for="showprivate">Show Private</label></span>
|
|
<span id="classopts"><input type="checkbox" name="showprotected" id="showprotected" /> <label for="showprotected">Show Protected</label></span>
|
|
<span id="classopts"><input type="checkbox" name="showdeprecated" id="showdeprecated" /> <label for="showdeprecated">Show Deprecated</label></span>
|
|
</form>
|
|
|
|
<div id="srcout">
|
|
<style>
|
|
#doc3 #classopts { display:none; }
|
|
</style>
|
|
<div class="highlight" ><pre><span class="o">(</span><span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
|
|
|
|
<span class="k">var</span> <span class="nx">lang</span> <span class="o">=</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">lang</span><span class="o">,</span>
|
|
<span class="nx">util</span> <span class="o">=</span> <span class="nx">YAHOO</span><span class="o">.</span><span class="nx">util</span><span class="o">,</span>
|
|
<span class="nx">Ev</span> <span class="o">=</span> <span class="nx">util</span><span class="o">.</span><span class="nx">Event</span><span class="o">;</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * The DataSource utility provides a common configurable interface for widgets to</span>
|
|
<span class="c"> * access a variety of data, from JavaScript arrays to online database servers.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @module datasource</span>
|
|
<span class="c"> * @requires yahoo, event</span>
|
|
<span class="c"> * @optional json, get, connection </span>
|
|
<span class="c"> * @title DataSource Utility</span>
|
|
<span class="c"> */</span>
|
|
|
|
<span class="c">/****************************************************************************/</span>
|
|
<span class="c">/****************************************************************************/</span>
|
|
<span class="c">/****************************************************************************/</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Base class for the YUI DataSource utility.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @namespace YAHOO.util</span>
|
|
<span class="c"> * @class YAHOO.util.DataSourceBase</span>
|
|
<span class="c"> * @constructor</span>
|
|
<span class="c"> * @param oLiveData {HTMLElement} Pointer to live data.</span>
|
|
<span class="c"> * @param oConfigs {object} (optional) Object literal of configuration values.</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">util</span><span class="o">.</span><span class="nx">DataSourceBase</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="kc">null</span> <span class="o">||</span> <span class="nx">oLiveData</span> <span class="o">===</span> <span class="kc">undefined</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">this</span><span class="o">.</span><span class="nx">responseSchema</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">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="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 {Object} The callback object.</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 {Object} The callback object.</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">"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 {Object} The callback object.</span>
|
|
<span class="c"> * @param oArgs.tId {Number} Transaction ID. </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 {Object} The callback object.</span>
|
|
<span class="c"> * @param oArgs.tId {Number} Transaction ID. </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 {Object} The callback object.</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 {Object} The callback object.</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 {Object} The callback object.</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="k">var</span> <span class="nx">DS</span> <span class="o">=</span> <span class="nx">util</span><span class="o">.</span><span class="nx">DataSourceBase</span><span class="o">;</span>
|
|
<span class="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">DS</span><span class="o">.</span><span class="nx">_nIndex</span><span class="o">;</span>
|
|
<span class="nx">DS</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="o">};</span>
|
|
|
|
<span class="k">var</span> <span class="nx">DS</span> <span class="o">=</span> <span class="nx">util</span><span class="o">.</span><span class="nx">DataSourceBase</span><span class="o">;</span>
|
|
|
|
<span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</span><span class="o">(</span><span class="nx">DS</span><span class="o">,</span> <span class="o">{</span>
|
|
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c">//</span>
|
|
<span class="c">// DataSourceBase 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">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">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">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">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">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">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">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. Data is parsed out of TR elements from all TBODY elements.</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">TYPE_HTMLTABLE</span> <span class="o">:</span> <span class="m">6</span><span class="o">,</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Type is hosted on a server via a dynamic script node.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property TYPE_SCRIPTNODE</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @final</span>
|
|
<span class="c"> * @default 7</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">TYPE_SCRIPTNODE</span> <span class="o">:</span> <span class="m">7</span><span class="o">,</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Type is local.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property TYPE_LOCAL</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @final</span>
|
|
<span class="c"> * @default 8</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">TYPE_LOCAL</span> <span class="o">:</span> <span class="m">8</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">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">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">// DataSourceBase private static properties</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 DataSourceBase._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">_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 DataSourceBase._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">_nTransactionId</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">// DataSourceBase public static methods</span>
|
|
<span class="c">//</span>
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c"></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"> * </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"> * @static </span>
|
|
<span class="c"> */</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">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">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"> * Converts data to type String.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method DataSourceBase.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">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">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">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">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 DataSourceBase.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">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">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">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">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.DataSourceBase.convertNumber() has been"</span> <span class="o">+</span>
|
|
<span class="s2">" deprecated in favor of YAHOO.util.DataSourceBase.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">DS</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 DataSourceBase.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">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">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">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.DataSourceBase.convertDate() has been"</span> <span class="o">+</span>
|
|
<span class="s2">" deprecated in favor of YAHOO.util.DataSourceBase.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">DS</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="o">});</span>
|
|
|
|
<span class="c">// Done in separate step so referenced functions are defined.</span>
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Data parsing functions.</span>
|
|
<span class="c"> * @property DataSource.Parser</span>
|
|
<span class="c"> * @type Object</span>
|
|
<span class="c"> * @static</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">DS</span><span class="o">.</span><span class="nx">Parser</span> <span class="o">=</span> <span class="o">{</span>
|
|
<span class="nx">string</span> <span class="o">:</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">parseString</span><span class="o">,</span>
|
|
<span class="nx">number</span> <span class="o">:</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">parseNumber</span><span class="o">,</span>
|
|
<span class="nx">date</span> <span class="o">:</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">parseDate</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">// Prototype properties and methods</span>
|
|
<span class="c"></span><span class="nx">DS</span><span class="o">.</span><span class="nx">prototype</span> <span class="o">=</span> <span class="o">{</span>
|
|
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c">//</span>
|
|
<span class="c">// DataSourceBase private properties</span>
|
|
<span class="c">//</span>
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c"></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">_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">_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">_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">_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">// DataSourceBase public properties</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">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">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"> * <dl> </span>
|
|
<span class="c"> * <dt>TYPE_UNKNOWN</dt></span>
|
|
<span class="c"> * <dt>TYPE_LOCAL</dt></span>
|
|
<span class="c"> * <dt>TYPE_XHR</dt></span>
|
|
<span class="c"> * <dt>TYPE_SCRIPTNODE</dt></span>
|
|
<span class="c"> * <dt>TYPE_JSFUNCTION</dt></span>
|
|
<span class="c"> * </dl> </span>
|
|
<span class="c"> * </span>
|
|
<span class="c"> * @property dataType</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @default YAHOO.util.DataSourceBase.TYPE_UNKNOWN</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">dataType</span> <span class="o">:</span> <span class="nx">DS</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"> * <dl> </span>
|
|
<span class="c"> * <dt>TYPE_UNKNOWN</dt></span>
|
|
<span class="c"> * <dt>TYPE_JSARRAY</dt></span>
|
|
<span class="c"> * <dt>TYPE_JSON</dt></span>
|
|
<span class="c"> * <dt>TYPE_XML</dt></span>
|
|
<span class="c"> * <dt>TYPE_TEXT</dt></span>
|
|
<span class="c"> * <dt>TYPE_HTMLTABLE</dt> </span>
|
|
<span class="c"> * </dl> </span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property responseType</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @default YAHOO.util.DataSourceBase.TYPE_UNKNOWN</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">responseType</span> <span class="o">:</span> <span class="nx">DS</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.DataSourceBase.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">responseSchema</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">// DataSourceBase 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">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 {Object} Callback object.</span>
|
|
<span class="c"> * @param oCaller {Object} (deprecated) Use callback object.</span>
|
|
<span class="c"> * @return {Object} Cached response object or null.</span>
|
|
<span class="c"> */</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="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="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="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">"Refreshed 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="o">}</span>
|
|
|
|
<span class="c">// Add a cache flag</span>
|
|
<span class="c"></span> <span class="nx">oResponse</span><span class="o">.</span><span class="nx">cached</span> <span class="o">=</span> <span class="kc">true</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">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">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">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">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">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">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">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">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">clearAllIntervals</span> <span class="o">:</span> <span class="k">function</span><span class="o">()</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">tracker</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_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">clearInterval</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">tracker</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">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">DS</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 default method generates a unique transaction ID and passes </span>
|
|
<span class="c"> * the live data reference directly to the handleResponse function. This</span>
|
|
<span class="c"> * method should be implemented by subclasses to achieve more complex behavior</span>
|
|
<span class="c"> * or to access remote data. </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">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">var</span> <span class="nx">tId</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">_nTransactionId</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">tId</span><span class="o">:</span><span class="nx">tId</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">/* accounts for the following cases:</span>
|
|
<span class="c"> YAHOO.util.DataSourceBase.TYPE_UNKNOWN</span>
|
|
<span class="c"> YAHOO.util.DataSourceBase.TYPE_JSARRAY</span>
|
|
<span class="c"> YAHOO.util.DataSourceBase.TYPE_JSON</span>
|
|
<span class="c"> YAHOO.util.DataSourceBase.TYPE_HTMLTABLE</span>
|
|
<span class="c"> YAHOO.util.DataSourceBase.TYPE_XML</span>
|
|
<span class="c"> YAHOO.util.DataSourceBase.TYPE_TEXT</span>
|
|
<span class="c"> */</span>
|
|
<span class="k">var</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">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>meta {Object}</dt> Object literal of meta values</dd> </span>
|
|
<span class="c"> * <dd><dt>error {Boolean}</dt> (optional) True if there was an error</dd></span>
|
|
<span class="c"> * <dd><dt>cached {Boolean}</dt> (optional) True if response was cached</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">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">tId</span><span class="o">:</span><span class="nx">tId</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">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">DS</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="c">// Try to sniff data type if it has not been defined</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">responseType</span> <span class="o">===</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_UNKNOWN</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">ctype</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oRawResponse</span> <span class="o">&&</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">getResponseHeader</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">getResponseHeader</span><span class="o">[</span><span class="s2">"Content-Type"</span><span class="o">]</span> <span class="o">:</span> <span class="kc">null</span><span class="o">;</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">ctype</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// xml</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">ctype</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">(</span><span class="s2">"text/xml"</span><span class="o">)</span> <span class="o">></span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_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">ctype</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">(</span><span class="s2">"application/json"</span><span class="o">)</span> <span class="o">></span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span> <span class="c">// json</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_JSON</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">ctype</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">(</span><span class="s2">"text/plain"</span><span class="o">)</span> <span class="o">></span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span> <span class="c">// text</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_TEXT</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">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">oRawResponse</span><span class="o">))</span> <span class="o">{</span> <span class="c">// array</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_JSARRAY</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// xml</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oRawResponse</span> <span class="o">&&</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">nodeType</span> <span class="o">&&</span> <span class="nx">oRawResponse</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">responseType</span> <span class="o">=</span> <span class="nx">DS</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">oRawResponse</span> <span class="o">&&</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">nodeName</span> <span class="o">&&</span> <span class="o">(</span><span class="nx">oRawResponse</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="c">// table</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_HTMLTABLE</span><span class="o">;</span>
|
|
<span class="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">oRawResponse</span><span class="o">))</span> <span class="o">{</span> <span class="c">// json</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_JSON</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">oRawResponse</span><span class="o">))</span> <span class="o">{</span> <span class="c">// text</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_TEXT</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</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">DS</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">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">oCallback</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">DS</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">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">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">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">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">oCallback</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">DS</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">oCallback</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">DS</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">oCallback</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">DS</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">lang</span><span class="o">.</span><span class="nx">isString</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">oCallback</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="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">oCallback</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">parseData</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="c">// Clean up for consistent signature</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="k">if</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="nx">oParsedResponse</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">if</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="o">{</span>
|
|
<span class="nx">oParsedResponse</span><span class="o">.</span><span class="nx">meta</span> <span class="o">=</span> <span class="o">{};</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="c">// Success</span>
|
|
<span class="c"></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="nx">oCallback</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="c">// Error</span>
|
|
<span class="c"></span> <span class="k">else</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">error</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">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">DS</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">DS</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="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">DS</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"> * @param oCallback {Object} The callback object. </span>
|
|
<span class="c"> * @return {Object} Full response for parsing.</span>
|
|
<span class="c"> </span>
|
|
<span class="c"> */</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="nx">oCallback</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"> * @param oCallback {Object} The callback object. </span>
|
|
<span class="c"> * @return {Object} Parsed response object.</span>
|
|
<span class="c"> */</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="nx">oCallback</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 data of generic RESPONSE_TYPE into a response object.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method parseData</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"> * - meta {Object} Object literal of meta values<br></span>
|
|
<span class="c"> * - error {Boolean} (optional) True if there was an error<br></span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">parseData</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">lang</span><span class="o">.</span><span class="nx">isValue</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">oFullResponse</span><span class="o">,</span><span class="nx">meta</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 generic data is "</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="nx">YAHOO</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">"Generic data could not be parsed: "</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 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</span>
|
|
<span class="c"> */</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">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">var</span> <span class="nx">results</span> <span class="o">=</span> <span class="o">[],</span>
|
|
<span class="nx">i</span><span class="o">,</span> <span class="nx">j</span><span class="o">,</span>
|
|
<span class="nx">rec</span><span class="o">,</span> <span class="nx">field</span><span class="o">,</span> <span class="nx">data</span><span class="o">;</span>
|
|
|
|
<span class="c">// Parse for fields</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">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">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">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="nx">p</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="nx">p</span> <span class="o">=</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="nx">parser</span> <span class="o">===</span> <span class="s1">'function'</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">DS</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="s1">''</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="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">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="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="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="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="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="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">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">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="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="nx">data</span> <span class="o">=</span> <span class="nx">rec</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="o">}</span>
|
|
<span class="c">// Return entire data set</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
|
|
<span class="nx">results</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">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">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="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">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</span>
|
|
<span class="c"> */</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">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">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">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">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="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">// 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">bError</span> <span class="o">=</span> <span class="kc">false</span><span class="o">,</span>
|
|
<span class="nx">sRecord</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="k">if</span> <span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">sRecord</span><span class="o">)</span> <span class="o">&&</span> <span class="o">(</span><span class="nx">sRecord</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">// Split each record along field delimiter to get data</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">var</span> <span class="nx">oResult</span> <span class="o">=</span> <span class="o">{};</span>
|
|
|
|
<span class="c">// Filter for fields data</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">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">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">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">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">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">var</span> <span class="nx">parser</span> <span class="o">=</span> <span class="o">(</span><span class="k">typeof</span> <span class="nx">field</span><span class="o">.</span><span class="nx">parser</span> <span class="o">===</span> <span class="s1">'function'</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">DS</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">parser</span><span class="o">+</span><span class="s1">''</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">data</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="o">}</span>
|
|
<span class="c">// No fields defined so pass along all data as an array</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="o">{</span>
|
|
<span class="nx">oResult</span> <span class="o">=</span> <span class="nx">fielddataarray</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="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">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">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 for one result into an object literal.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method parseXMLResult</span>
|
|
<span class="c"> * @param result {XML} XML for one result.</span>
|
|
<span class="c"> * @return {Object} Object literal of data for one result.</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">parseXMLResult</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">result</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="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">try</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">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="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="k">var</span> <span class="nx">item</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="c">// For IE, then DOM...</span>
|
|
<span class="c"></span> <span class="nx">data</span> <span class="o">=</span> <span class="o">(</span><span class="nx">item</span><span class="o">.</span><span class="nx">text</span><span class="o">)</span> <span class="o">?</span> <span class="nx">item</span><span class="o">.</span><span class="nx">text</span> <span class="o">:</span> <span class="o">(</span><span class="nx">item</span><span class="o">.</span><span class="nx">textContent</span><span class="o">)</span> <span class="o">?</span> <span class="nx">item</span><span class="o">.</span><span class="nx">textContent</span> <span class="o">:</span> <span class="kc">null</span><span class="o">;</span>
|
|
<span class="c">// ...then fallback, but check for multiple child nodes</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="o">{</span>
|
|
<span class="k">var</span> <span class="nx">datapieces</span> <span class="o">=</span> <span class="o">[];</span>
|
|
<span class="k">for</span><span class="o">(</span><span class="k">var</span> <span class="nx">j</span><span class="o">=</span><span class="m">0</span><span class="o">,</span> <span class="nx">len</span><span class="o">=</span><span class="nx">item</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span> <span class="nx">j</span><span class="o"><</span><span class="nx">len</span><span class="o">;</span> <span class="nx">j</span><span class="o">++)</span> <span class="o">{</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">item</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">nodeValue</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">datapieces</span><span class="o">[</span><span class="nx">datapieces</span><span class="o">.</span><span class="nx">length</span><span class="o">]</span> <span class="o">=</span> <span class="nx">item</span><span class="o">.</span><span class="nx">childNodes</span><span class="o">[</span><span class="nx">j</span><span class="o">].</span><span class="nx">nodeValue</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">datapieces</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">data</span> <span class="o">=</span> <span class="nx">datapieces</span><span class="o">.</span><span class="nx">join</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="c">// Safety net</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">null</span><span class="o">)</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="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">var</span> <span class="nx">parser</span> <span class="o">=</span> <span class="o">(</span><span class="k">typeof</span> <span class="nx">field</span><span class="o">.</span><span class="nx">parser</span> <span class="o">===</span> <span class="s1">'function'</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">DS</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">parser</span><span class="o">+</span><span class="s1">''</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">data</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="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 result: "</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">return</span> <span class="nx">oResult</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</span>
|
|
<span class="c"> */</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">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="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">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">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">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">oResult</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">parseXMLResult</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="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">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">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</span>
|
|
<span class="c"> */</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="k">if</span><span class="o">(</span><span class="nx">lang</span><span class="o">.</span><span class="nx">isObject</span><span class="o">(</span><span class="nx">oFullResponse</span><span class="o">)</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">resultsList</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">var</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">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 convert the schema's fields 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="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 locator: "</span> <span class="o">+</span> <span class="nx">needle</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="k">return</span> <span class="nx">path</span><span class="o">;</span>
|
|
<span class="o">};</span>
|
|
|
|
|
|
<span class="c">// 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">// 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="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="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">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. Parse out field data 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">fields</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="c">// Build the field 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="m">0</span><span class="o">,</span> <span class="nx">len</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="nx">i</span><span class="o"><</span><span class="nx">len</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
|
|
<span class="nx">field</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">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="nx">parser</span> <span class="o">=</span> <span class="o">((</span><span class="k">typeof</span> <span class="nx">field</span><span class="o">.</span><span class="nx">parser</span> <span class="o">===</span> <span class="s1">'function'</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">DS</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">parser</span><span class="o">+</span><span class="s1">''</span><span class="o">])</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">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="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="m">0</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">// Process the results, flattening the records and/or 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="c">// Bug 1777850: data might be held in an array</span>
|
|
<span class="c"></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="nx">key</span><span class="o">]</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="nx">path</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">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="nx">path</span><span class="o">]</span> <span class="o">:</span> <span class="nx">r</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="o">}</span>
|
|
<span class="k">else</span> <span class="o">{</span>
|
|
<span class="nx">results</span> <span class="o">=</span> <span class="nx">resultsList</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">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">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="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">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"> * Data is parsed out of TR elements from all TBODY elements. </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</span>
|
|
<span class="c"> */</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">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">var</span> <span class="nx">parser</span> <span class="o">=</span> <span class="o">(</span><span class="k">typeof</span> <span class="nx">field</span><span class="o">.</span><span class="nx">parser</span> <span class="o">===</span> <span class="s1">'function'</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">DS</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">parser</span><span class="o">+</span><span class="s1">''</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">data</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">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">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="o">};</span>
|
|
|
|
<span class="c">// DataSourceBase uses EventProvider</span>
|
|
<span class="c"></span><span class="nx">lang</span><span class="o">.</span><span class="nx">augmentProto</span><span class="o">(</span><span class="nx">DS</span><span class="o">,</span> <span class="nx">util</span><span class="o">.</span><span class="nx">EventProvider</span><span class="o">);</span>
|
|
|
|
|
|
|
|
<span class="c">/****************************************************************************/</span>
|
|
<span class="c">/****************************************************************************/</span>
|
|
<span class="c">/****************************************************************************/</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * LocalDataSource class for in-memory data structs including JavaScript arrays,</span>
|
|
<span class="c"> * JavaScript object literals (JSON), XML documents, and HTML tables.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @namespace YAHOO.util</span>
|
|
<span class="c"> * @class YAHOO.util.LocalDataSource</span>
|
|
<span class="c"> * @extends YAHOO.util.DataSourceBase </span>
|
|
<span class="c"> * @constructor</span>
|
|
<span class="c"> * @param oLiveData {HTMLElement} Pointer to live data.</span>
|
|
<span class="c"> * @param oConfigs {object} (optional) Object literal of configuration values.</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">util</span><span class="o">.</span><span class="nx">LocalDataSource</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">this</span><span class="o">.</span><span class="nx">dataType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_LOCAL</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="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="c">// array</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_JSARRAY</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// xml</span>
|
|
<span class="c"></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">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">responseType</span> <span class="o">=</span> <span class="nx">DS</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">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="c">// table</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_HTMLTABLE</span><span class="o">;</span>
|
|
<span class="nx">oLiveData</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">isString</span><span class="o">(</span><span class="nx">oLiveData</span><span class="o">))</span> <span class="o">{</span> <span class="c">// text</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_TEXT</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="c">// json</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_JSON</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">oLiveData</span> <span class="o">=</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="nx">DS</span><span class="o">.</span><span class="nx">TYPE_JSARRAY</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">constructor</span><span class="o">.</span><span class="nx">superclass</span><span class="o">.</span><span class="nx">constructor</span><span class="o">.</span><span class="nx">call</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="nx">oLiveData</span><span class="o">,</span> <span class="nx">oConfigs</span><span class="o">);</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">// LocalDataSource extends DataSourceBase</span>
|
|
<span class="c"></span><span class="nx">lang</span><span class="o">.</span><span class="nx">extend</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">LocalDataSource</span><span class="o">,</span> <span class="nx">DS</span><span class="o">);</span>
|
|
|
|
<span class="c">// Copy static members to LocalDataSource class</span>
|
|
<span class="c"></span><span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">LocalDataSource</span><span class="o">,</span> <span class="nx">DS</span><span class="o">);</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="c">/****************************************************************************/</span>
|
|
<span class="c">/****************************************************************************/</span>
|
|
<span class="c">/****************************************************************************/</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * FunctionDataSource class for JavaScript functions.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @namespace YAHOO.util</span>
|
|
<span class="c"> * @class YAHOO.util.FunctionDataSource</span>
|
|
<span class="c"> * @extends YAHOO.util.DataSourceBase </span>
|
|
<span class="c"> * @constructor</span>
|
|
<span class="c"> * @param oLiveData {HTMLElement} Pointer to live data.</span>
|
|
<span class="c"> * @param oConfigs {object} (optional) Object literal of configuration values.</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">util</span><span class="o">.</span><span class="nx">FunctionDataSource</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">this</span><span class="o">.</span><span class="nx">dataType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_JSFUNCTION</span><span class="o">;</span>
|
|
<span class="nx">oLiveData</span> <span class="o">=</span> <span class="nx">oLiveData</span> <span class="o">||</span> <span class="k">function</span><span class="o">()</span> <span class="o">{};</span>
|
|
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">constructor</span><span class="o">.</span><span class="nx">superclass</span><span class="o">.</span><span class="nx">constructor</span><span class="o">.</span><span class="nx">call</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="nx">oLiveData</span><span class="o">,</span> <span class="nx">oConfigs</span><span class="o">);</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">// FunctionDataSource extends DataSourceBase</span>
|
|
<span class="c"></span><span class="nx">lang</span><span class="o">.</span><span class="nx">extend</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">FunctionDataSource</span><span class="o">,</span> <span class="nx">DS</span><span class="o">,</span> <span class="o">{</span>
|
|
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c">//</span>
|
|
<span class="c">// FunctionDataSource public methods</span>
|
|
<span class="c">//</span>
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c"></span>
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Overriding method passes query to a function. The returned response is then</span>
|
|
<span class="c"> * forwarded to the handleResponse function.</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">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">var</span> <span class="nx">tId</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">_nTransactionId</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">tId</span><span class="o">:</span><span class="nx">tId</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">// 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="k">var</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="c">// Try to sniff data type if it has not been defined</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">responseType</span> <span class="o">===</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_UNKNOWN</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">oRawResponse</span><span class="o">))</span> <span class="o">{</span> <span class="c">// array</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_JSARRAY</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// xml</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oRawResponse</span> <span class="o">&&</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">nodeType</span> <span class="o">&&</span> <span class="nx">oRawResponse</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">responseType</span> <span class="o">=</span> <span class="nx">DS</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">oRawResponse</span> <span class="o">&&</span> <span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">nodeName</span> <span class="o">&&</span> <span class="o">(</span><span class="nx">oRawResponse</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="c">// table</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_HTMLTABLE</span><span class="o">;</span>
|
|
<span class="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">oRawResponse</span><span class="o">))</span> <span class="o">{</span> <span class="c">// json</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_JSON</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">oRawResponse</span><span class="o">))</span> <span class="o">{</span> <span class="c">// text</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_TEXT</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">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">return</span> <span class="nx">tId</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="o">});</span>
|
|
|
|
<span class="c">// Copy static members to FunctionDataSource class</span>
|
|
<span class="c"></span><span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">FunctionDataSource</span><span class="o">,</span> <span class="nx">DS</span><span class="o">);</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="c">/****************************************************************************/</span>
|
|
<span class="c">/****************************************************************************/</span>
|
|
<span class="c">/****************************************************************************/</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * ScriptNodeDataSource class for accessing remote data via the YUI Get Utility. </span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @namespace YAHOO.util</span>
|
|
<span class="c"> * @class YAHOO.util.ScriptNodeDataSource</span>
|
|
<span class="c"> * @extends YAHOO.util.DataSourceBase </span>
|
|
<span class="c"> * @constructor</span>
|
|
<span class="c"> * @param oLiveData {HTMLElement} Pointer to live data.</span>
|
|
<span class="c"> * @param oConfigs {object} (optional) Object literal of configuration values.</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</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">this</span><span class="o">.</span><span class="nx">dataType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_SCRIPTNODE</span><span class="o">;</span>
|
|
<span class="nx">oLiveData</span> <span class="o">=</span> <span class="nx">oLiveData</span> <span class="o">||</span> <span class="s2">""</span><span class="o">;</span>
|
|
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">constructor</span><span class="o">.</span><span class="nx">superclass</span><span class="o">.</span><span class="nx">constructor</span><span class="o">.</span><span class="nx">call</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="nx">oLiveData</span><span class="o">,</span> <span class="nx">oConfigs</span><span class="o">);</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">// ScriptNodeDataSource extends DataSourceBase</span>
|
|
<span class="c"></span><span class="nx">lang</span><span class="o">.</span><span class="nx">extend</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">,</span> <span class="nx">DS</span><span class="o">,</span> <span class="o">{</span>
|
|
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c">//</span>
|
|
<span class="c">// ScriptNodeDataSource public properties</span>
|
|
<span class="c">//</span>
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c"></span>
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Alias to YUI Get Utility, to allow implementers to use a custom class.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property getUtility</span>
|
|
<span class="c"> * @type Object</span>
|
|
<span class="c"> * @default YAHOO.util.Get</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">getUtility</span> <span class="o">:</span> <span class="nx">util</span><span class="o">.</span><span class="nx">Get</span><span class="o">,</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Defines 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 before sending the next request.</dd></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 request.</dd>--></span>
|
|
<span class="c"> * <dt>ignoreStaleResponses</dt></span>
|
|
<span class="c"> * <dd>Send all requests, but handle only the response for the most recently sent request.</dd></span>
|
|
<span class="c"> * <dt>allowAll</dt></span>
|
|
<span class="c"> * <dd>Send all requests and handle all responses.</dd></span>
|
|
<span class="c"> * </dl></span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property asyncMode</span>
|
|
<span class="c"> * @type String</span>
|
|
<span class="c"> * @default "allowAll"</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">asyncMode</span> <span class="o">:</span> <span class="s2">"allowAll"</span><span class="o">,</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Callback string parameter name sent to the remote script. By default,</span>
|
|
<span class="c"> * requests are sent to</span>
|
|
<span class="c"> * &#60;URI&#62;?&#60;scriptCallbackParam&#62;=callbackFunction</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property scriptCallbackParam</span>
|
|
<span class="c"> * @type String</span>
|
|
<span class="c"> * @default "callback"</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">scriptCallbackParam</span> <span class="o">:</span> <span class="s2">"callback"</span><span class="o">,</span>
|
|
|
|
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c">//</span>
|
|
<span class="c">// ScriptNodeDataSource public methods</span>
|
|
<span class="c">//</span>
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c"></span>
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Creates a request callback that gets appended to the script URI. Implementers</span>
|
|
<span class="c"> * can customize this string to match their server's query syntax.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @method generateRequestCallback</span>
|
|
<span class="c"> * @return {String} String fragment that gets appended to script URI that </span>
|
|
<span class="c"> * specifies the callback function </span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">generateRequestCallback</span> <span class="o">:</span> <span class="k">function</span><span class="o">(</span><span class="nx">id</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">return</span> <span class="s2">"&"</span> <span class="o">+</span> <span class="k">this</span><span class="o">.</span><span class="nx">scriptCallbackParam</span> <span class="o">+</span> <span class="s2">"=YAHOO.util.ScriptNodeDataSource.callbacks["</span><span class="o">+</span><span class="nx">id</span><span class="o">+</span><span class="s2">"]"</span> <span class="o">;</span>
|
|
<span class="o">},</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Overriding method passes query to Get Utility. The returned</span>
|
|
<span class="c"> * response is then forwarded to the handleResponse function.</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">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">var</span> <span class="nx">tId</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">_nTransactionId</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">tId</span><span class="o">:</span><span class="nx">tId</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">// If there are no global pending requests, it is safe to purge global callback stack and global counter</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">.</span><span class="nx">_nPending</span> <span class="o">===</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">.</span><span class="nx">callbacks</span> <span class="o">=</span> <span class="o">[];</span>
|
|
<span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">.</span><span class="nx">_nId</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="c">// ID for this request</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">id</span> <span class="o">=</span> <span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">.</span><span class="nx">_nId</span><span class="o">;</span>
|
|
<span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">.</span><span class="nx">_nId</span><span class="o">++;</span>
|
|
|
|
<span class="c">// Dynamically add handler function with a closure to the callback stack</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">oSelf</span> <span class="o">=</span> <span class="k">this</span><span class="o">;</span>
|
|
<span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">.</span><span class="nx">callbacks</span><span class="o">[</span><span class="nx">id</span><span class="o">]</span> <span class="o">=</span> <span class="k">function</span><span class="o">(</span><span class="nx">oRawResponse</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">if</span><span class="o">((</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">asyncMode</span> <span class="o">!==</span> <span class="s2">"ignoreStaleResponses"</span><span class="o">)||</span>
|
|
<span class="o">(</span><span class="nx">id</span> <span class="o">===</span> <span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">.</span><span class="nx">callbacks</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">// Must ignore stale responses</span>
|
|
<span class="c"></span>
|
|
<span class="c">// Try to sniff data type if it has not been defined</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">oSelf</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">===</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_UNKNOWN</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">oRawResponse</span><span class="o">))</span> <span class="o">{</span> <span class="c">// array</span>
|
|
<span class="c"></span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_JSARRAY</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="c">// xml</span>
|
|
<span class="c"></span> <span class="k">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">oRawResponse</span><span class="o">.</span><span class="nx">nodeType</span> <span class="o">&&</span> <span class="nx">oRawResponse</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="nx">oSelf</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_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">oRawResponse</span><span class="o">.</span><span class="nx">nodeName</span> <span class="o">&&</span> <span class="o">(</span><span class="nx">oRawResponse</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="c">// table</span>
|
|
<span class="c"></span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_HTMLTABLE</span><span class="o">;</span>
|
|
<span class="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">oRawResponse</span><span class="o">))</span> <span class="o">{</span> <span class="c">// json</span>
|
|
<span class="c"></span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_JSON</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">oRawResponse</span><span class="o">))</span> <span class="o">{</span> <span class="c">// text</span>
|
|
<span class="c"></span> <span class="nx">oSelf</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_TEXT</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="nx">oSelf</span><span class="o">.</span><span class="nx">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="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">"DataSource ignored stale response for tId "</span> <span class="o">+</span> <span class="nx">tId</span> <span class="o">+</span> <span class="s2">"("</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="nx">oSelf</span><span class="o">.</span><span class="nx">toString</span><span class="o">());</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="nx">delete</span> <span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">.</span><span class="nx">callbacks</span><span class="o">[</span><span class="nx">id</span><span class="o">];</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">// We are now creating a request</span>
|
|
<span class="c"></span> <span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">.</span><span class="nx">_nPending</span><span class="o">++;</span>
|
|
<span class="k">var</span> <span class="nx">sUri</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">generateRequestCallback</span><span class="o">(</span><span class="nx">id</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 is querying URL "</span> <span class="o">+</span> <span class="nx">sUri</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">this</span><span class="o">.</span><span class="nx">getUtility</span><span class="o">.</span><span class="nx">script</span><span class="o">(</span><span class="nx">sUri</span><span class="o">,</span>
|
|
<span class="o">{</span><span class="nx">autopurge</span><span class="o">:</span> <span class="kc">true</span><span class="o">,</span>
|
|
<span class="nx">onsuccess</span><span class="o">:</span> <span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">.</span><span class="nx">_bumpPendingDown</span><span class="o">,</span>
|
|
<span class="nx">onfail</span><span class="o">:</span> <span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">.</span><span class="nx">_bumpPendingDown</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="o">});</span>
|
|
|
|
<span class="c">// Copy static members to ScriptNodeDataSource class</span>
|
|
<span class="c"></span><span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">,</span> <span class="nx">DS</span><span class="o">);</span>
|
|
|
|
<span class="c">// Copy static members to ScriptNodeDataSource class</span>
|
|
<span class="c"></span><span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">,</span> <span class="o">{</span>
|
|
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c">//</span>
|
|
<span class="c">// ScriptNodeDataSource private static properties</span>
|
|
<span class="c">//</span>
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c"></span>
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Unique ID to track requests.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property _nId</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @private</span>
|
|
<span class="c"> * @static</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">_nId</span> <span class="o">:</span> <span class="m">0</span><span class="o">,</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Counter for pending requests. When this is 0, it is safe to purge callbacks</span>
|
|
<span class="c"> * array.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property _nPending</span>
|
|
<span class="c"> * @type Number</span>
|
|
<span class="c"> * @private</span>
|
|
<span class="c"> * @static</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">_nPending</span> <span class="o">:</span> <span class="m">0</span><span class="o">,</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Global array of callback functions, one for each request sent.</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @property callbacks</span>
|
|
<span class="c"> * @type Function[]</span>
|
|
<span class="c"> * @static</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">callbacks</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"> * XHRDataSource class for accessing remote data via the YUI Connection Manager</span>
|
|
<span class="c"> * Utility</span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @namespace YAHOO.util</span>
|
|
<span class="c"> * @class YAHOO.util.XHRDataSource</span>
|
|
<span class="c"> * @extends YAHOO.util.DataSourceBase </span>
|
|
<span class="c"> * @constructor</span>
|
|
<span class="c"> * @param oLiveData {HTMLElement} Pointer to live data.</span>
|
|
<span class="c"> * @param oConfigs {object} (optional) Object literal of configuration values.</span>
|
|
<span class="c"> */</span>
|
|
<span class="nx">util</span><span class="o">.</span><span class="nx">XHRDataSource</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">this</span><span class="o">.</span><span class="nx">dataType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_XHR</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="k">this</span><span class="o">.</span><span class="nx">connMgr</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="nx">oLiveData</span> <span class="o">=</span> <span class="nx">oLiveData</span> <span class="o">||</span> <span class="s2">""</span><span class="o">;</span>
|
|
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">constructor</span><span class="o">.</span><span class="nx">superclass</span><span class="o">.</span><span class="nx">constructor</span><span class="o">.</span><span class="nx">call</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="nx">oLiveData</span><span class="o">,</span> <span class="nx">oConfigs</span><span class="o">);</span>
|
|
<span class="o">};</span>
|
|
|
|
<span class="c">// XHRDataSource extends DataSourceBase</span>
|
|
<span class="c"></span><span class="nx">lang</span><span class="o">.</span><span class="nx">extend</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">XHRDataSource</span><span class="o">,</span> <span class="nx">DS</span><span class="o">,</span> <span class="o">{</span>
|
|
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c">//</span>
|
|
<span class="c">// XHRDataSource public properties</span>
|
|
<span class="c">//</span>
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c"></span>
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Alias to YUI Connection Manager, to allow implementers to use a custom class.</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">connMgr</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Defines 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">connXhrMode</span><span class="o">:</span> <span class="s2">"allowAll"</span><span class="o">,</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * True if data is to be sent via POST. By default, 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">connMethodPost</span><span class="o">:</span> <span class="kc">false</span><span class="o">,</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * The connection timeout defines how many milliseconds the XHR connection will</span>
|
|
<span class="c"> * wait for a server response. Any non-zero value will enable the Connection Manager'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">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">// XHRDataSource public methods</span>
|
|
<span class="c">//</span>
|
|
<span class="c">/////////////////////////////////////////////////////////////////////////////</span>
|
|
<span class="c"></span>
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Overriding method passes query to Connection Manager. The returned</span>
|
|
<span class="c"> * response is then forwarded to the handleResponse function.</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">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">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">DS</span><span class="o">.</span><span class="nx">_nTransactionId</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">tId</span><span class="o">:</span><span class="nx">tId</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">// 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="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="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">asyncMode</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">DS</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">DS</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="nx">DS</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="c">// Try to sniff data type if it has not been defined</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">responseType</span> <span class="o">===</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_UNKNOWN</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">var</span> <span class="nx">ctype</span> <span class="o">=</span> <span class="o">(</span><span class="nx">oResponse</span><span class="o">.</span><span class="nx">getResponseHeader</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oResponse</span><span class="o">.</span><span class="nx">getResponseHeader</span><span class="o">[</span><span class="s2">"Content-Type"</span><span class="o">]</span> <span class="o">:</span> <span class="kc">null</span><span class="o">;</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">ctype</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="c">// xml</span>
|
|
<span class="c"></span> <span class="k">if</span><span class="o">(</span><span class="nx">ctype</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">(</span><span class="s2">"text/xml"</span><span class="o">)</span> <span class="o">></span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_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">ctype</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">(</span><span class="s2">"application/json"</span><span class="o">)</span> <span class="o">></span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span> <span class="c">// json</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_JSON</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">ctype</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">(</span><span class="s2">"text/plain"</span><span class="o">)</span> <span class="o">></span> <span class="o">-</span><span class="m">1</span><span class="o">)</span> <span class="o">{</span> <span class="c">// text</span>
|
|
<span class="c"></span> <span class="k">this</span><span class="o">.</span><span class="nx">responseType</span> <span class="o">=</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_TEXT</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
<span class="o">}</span>
|
|
<span class="k">this</span><span class="o">.</span><span class="nx">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">DS</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">DS</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="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">liveData</span><span class="o">)</span> <span class="o">&&</span> <span class="nx">lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">oRequest</span><span class="o">)</span> <span class="o">&&</span>
|
|
<span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">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 automatically supply "</span> <span class="o">+</span>
|
|
<span class="s2">"a \"?\" 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">DS</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">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="c">// Validate request</span>
|
|
<span class="c"></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">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">oRequest</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="k">var</span> <span class="nx">allRequests</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="c">// Add request to queue</span>
|
|
<span class="c"></span> <span class="nx">allRequests</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">allRequests</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">// Validate request</span>
|
|
<span class="c"></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">lang</span><span class="o">.</span><span class="nx">isValue</span><span class="o">(</span><span class="nx">allRequests</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="o">?</span> <span class="nx">sLiveData</span> <span class="o">:</span> <span class="nx">sLiveData</span><span class="o">+</span><span class="nx">allRequests</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">allRequests</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">allRequests</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">allRequests</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">DS</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">return</span> <span class="nx">tId</span><span class="o">;</span>
|
|
<span class="o">}</span>
|
|
|
|
<span class="o">});</span>
|
|
|
|
<span class="c">// Copy static members to XHRDataSource class</span>
|
|
<span class="c"></span><span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">XHRDataSource</span><span class="o">,</span> <span class="nx">DS</span><span class="o">);</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="c">/****************************************************************************/</span>
|
|
<span class="c">/****************************************************************************/</span>
|
|
<span class="c">/****************************************************************************/</span>
|
|
|
|
<span class="c">/**</span>
|
|
<span class="c"> * Factory class for creating a BaseDataSource subclass instance. The sublcass is</span>
|
|
<span class="c"> * determined by oLiveData's type, unless the dataType config is explicitly passed in. </span>
|
|
<span class="c"> *</span>
|
|
<span class="c"> * @namespace YAHOO.util</span>
|
|
<span class="c"> * @class YAHOO.util.DataSource</span>
|
|
<span class="c"> * @constructor</span>
|
|
<span class="c"> * @param oLiveData {HTMLElement} Pointer to live data.</span>
|
|
<span class="c"> * @param oConfigs {object} (optional) Object literal of configuration values.</span>
|
|
<span class="c"> */</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="nx">oConfigs</span> <span class="o">=</span> <span class="nx">oConfigs</span> <span class="o">||</span> <span class="o">{};</span>
|
|
|
|
<span class="c">// Point to one of the subclasses, first by dataType if given, then by sniffing oLiveData type.</span>
|
|
<span class="c"></span> <span class="k">var</span> <span class="nx">dataType</span> <span class="o">=</span> <span class="nx">oConfigs</span><span class="o">.</span><span class="nx">dataType</span><span class="o">;</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">dataType</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="k">if</span><span class="o">(</span><span class="nx">dataType</span> <span class="o">==</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_LOCAL</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</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">util</span><span class="o">.</span><span class="nx">LocalDataSource</span><span class="o">);</span>
|
|
<span class="k">return</span> <span class="k">new</span> <span class="nx">util</span><span class="o">.</span><span class="nx">LocalDataSource</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">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">dataType</span> <span class="o">==</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_XHR</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</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">util</span><span class="o">.</span><span class="nx">XHRDataSource</span><span class="o">);</span>
|
|
<span class="k">return</span> <span class="k">new</span> <span class="nx">util</span><span class="o">.</span><span class="nx">XHRDataSource</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">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">dataType</span> <span class="o">==</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_SCRIPTNODE</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</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">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</span><span class="o">);</span>
|
|
<span class="k">return</span> <span class="k">new</span> <span class="nx">util</span><span class="o">.</span><span class="nx">ScriptNodeDataSource</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">else</span> <span class="k">if</span><span class="o">(</span><span class="nx">dataType</span> <span class="o">==</span> <span class="nx">DS</span><span class="o">.</span><span class="nx">TYPE_JSFUNCTION</span><span class="o">)</span> <span class="o">{</span>
|
|
<span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</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">util</span><span class="o">.</span><span class="nx">FunctionDataSource</span><span class="o">);</span>
|
|
<span class="k">return</span> <span class="k">new</span> <span class="nx">util</span><span class="o">.</span><span class="nx">FunctionDataSource</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="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">oLiveData</span><span class="o">))</span> <span class="o">{</span> <span class="c">// strings default to xhr</span>
|
|
<span class="c"></span> <span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">,</span> <span class="nx">util</span><span class="o">.</span><span class="nx">XHRDataSource</span><span class="o">);</span>
|
|
<span class="k">return</span> <span class="k">new</span> <span class="nx">util</span><span class="o">.</span><span class="nx">XHRDataSource</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">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="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</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">util</span><span class="o">.</span><span class="nx">FunctionDataSource</span><span class="o">);</span>
|
|
<span class="k">return</span> <span class="k">new</span> <span class="nx">util</span><span class="o">.</span><span class="nx">FunctionDataSource</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">else</span> <span class="o">{</span> <span class="c">// ultimate default is local</span>
|
|
<span class="c"></span> <span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">,</span> <span class="nx">util</span><span class="o">.</span><span class="nx">LocalDataSource</span><span class="o">);</span>
|
|
<span class="k">return</span> <span class="k">new</span> <span class="nx">util</span><span class="o">.</span><span class="nx">LocalDataSource</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="o">};</span>
|
|
|
|
<span class="c">// Copy static members to DataSource class</span>
|
|
<span class="c"></span><span class="nx">lang</span><span class="o">.</span><span class="nx">augmentObject</span><span class="o">(</span><span class="nx">util</span><span class="o">.</span><span class="nx">DataSource</span><span class="o">,</span> <span class="nx">DS</span><span class="o">);</span>
|
|
|
|
<span class="o">})();</span>
|
|
</pre></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="yui-b">
|
|
<div class="nav">
|
|
|
|
<div class="module">
|
|
<h4>Modules</h4>
|
|
<ul class="content">
|
|
|
|
<li class=""><a href="module_animation.html">animation</a></li>
|
|
|
|
<li class=""><a href="module_autocomplete.html">autocomplete</a></li>
|
|
|
|
<li class=""><a href="module_button.html">button</a></li>
|
|
|
|
<li class=""><a href="module_calendar.html">calendar</a></li>
|
|
|
|
<li class=""><a href="module_carousel.html">carousel</a></li>
|
|
|
|
<li class=""><a href="module_charts.html">charts</a></li>
|
|
|
|
<li class=""><a href="module_colorpicker.html">colorpicker</a></li>
|
|
|
|
<li class=""><a href="module_connection.html">connection</a></li>
|
|
|
|
<li class=""><a href="module_container.html">container</a></li>
|
|
|
|
<li class=""><a href="module_cookie.html">cookie</a></li>
|
|
|
|
<li class="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_paginator.html">paginator</a></li>
|
|
|
|
<li class=""><a href="module_profiler.html">profiler</a></li>
|
|
|
|
<li class=""><a href="module_profilerviewer.html">profilerviewer</a></li>
|
|
|
|
<li class=""><a href="module_resize.html">resize</a></li>
|
|
|
|
<li class=""><a href="module_selector.html">selector</a></li>
|
|
|
|
<li class=""><a href="module_slider.html">slider</a></li>
|
|
|
|
<li class=""><a href="module_tabview.html">tabview</a></li>
|
|
|
|
<li class=""><a href="module_treeview.html">treeview</a></li>
|
|
|
|
<li class=""><a href="module_uploader.html">uploader</a></li>
|
|
|
|
<li class=""><a href="module_yahoo.html">yahoo</a></li>
|
|
|
|
<li class=""><a href="module_yuiloader.html">yuiloader</a></li>
|
|
|
|
<li class=""><a href="module_yuitest.html">yuitest</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="module">
|
|
<h4>Classes</h4>
|
|
<ul class="content">
|
|
<li class=""><a href="YAHOO.util.DataSource.html">YAHOO.util.DataSource</a></li>
|
|
<li class=""><a href="YAHOO.util.DataSourceBase.html">YAHOO.util.DataSourceBase</a></li>
|
|
<li class=""><a href="YAHOO.util.Date.html">YAHOO.util.Date</a></li>
|
|
<li class=""><a href="YAHOO.util.DateLocale.html">YAHOO.util.DateLocale</a></li>
|
|
<li class=""><a href="YAHOO.util.FunctionDataSource.html">YAHOO.util.FunctionDataSource</a></li>
|
|
<li class=""><a href="YAHOO.util.LocalDataSource.html">YAHOO.util.LocalDataSource</a></li>
|
|
<li class=""><a href="YAHOO.util.Number.html">YAHOO.util.Number</a></li>
|
|
<li class=""><a href="YAHOO.util.ScriptNodeDataSource.html">YAHOO.util.ScriptNodeDataSource</a></li>
|
|
<li class=""><a href="YAHOO.util.XHRDataSource.html">YAHOO.util.XHRDataSource</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>
|
|
<li class=""><a href="Type.js.html">Type.js</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="ft">
|
|
<hr />
|
|
Copyright © 2008 Yahoo! Inc. All rights reserved.
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|