Adding float-no-zero branch hosted build
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
// Copyright 2006 The Closure Library Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS-IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
/**
|
||||
* @fileoverview Implementation of DataNode for wrapping JSON data.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
goog.provide('goog.ds.JsonDataSource');
|
||||
|
||||
goog.require('goog.Uri');
|
||||
goog.require('goog.dom');
|
||||
goog.require('goog.ds.DataManager');
|
||||
goog.require('goog.ds.JsDataSource');
|
||||
goog.require('goog.ds.LoadState');
|
||||
goog.require('goog.ds.logger');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Data source whose backing is a JSON-like service, in which
|
||||
* retreiving the resource specified by URL with the additional parameter
|
||||
* callback. The resource retreived is executable JavaScript that
|
||||
* makes a call to the named function with a JavaScript object literal
|
||||
* as the only parameter.
|
||||
*
|
||||
* Example URI could be:
|
||||
* http://www.google.com/data/search?q=monkey&callback=mycb
|
||||
* which might return the JS:
|
||||
* mycb({searchresults:
|
||||
* [{uri: 'http://www.monkey.com', title: 'Site About Monkeys'}]});
|
||||
*
|
||||
* TODO(user): Evaluate using goog.net.Jsonp here.
|
||||
*
|
||||
* A URI of an empty string will mean that no request is made
|
||||
* and the data source will be a data source with no child nodes
|
||||
*
|
||||
* @param {string|goog.Uri} uri URI for the request.
|
||||
* @param {string} name Name of the datasource.
|
||||
* @param {string=} opt_callbackParamName The parameter name that is used to
|
||||
* specify the callback. Defaults to 'callback'.
|
||||
*
|
||||
* @extends {goog.ds.JsDataSource}
|
||||
* @constructor
|
||||
*/
|
||||
goog.ds.JsonDataSource = function(uri, name, opt_callbackParamName) {
|
||||
goog.ds.JsDataSource.call(this, null, name, null);
|
||||
if (uri) {
|
||||
this.uri_ = new goog.Uri(uri);
|
||||
} else {
|
||||
this.uri_ = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the callback parameter name that is added to the uri.
|
||||
* @type {string}
|
||||
* @private
|
||||
*/
|
||||
this.callbackParamName_ = opt_callbackParamName || 'callback';
|
||||
|
||||
};
|
||||
goog.inherits(goog.ds.JsonDataSource, goog.ds.JsDataSource);
|
||||
|
||||
|
||||
/**
|
||||
* Default load state is NOT_LOADED
|
||||
* @private
|
||||
*/
|
||||
goog.ds.JsonDataSource.prototype.loadState_ = goog.ds.LoadState.NOT_LOADED;
|
||||
|
||||
|
||||
/**
|
||||
* Map of all data sources, needed for callbacks
|
||||
* Doesn't work unless dataSources is exported (not renamed)
|
||||
*/
|
||||
goog.ds.JsonDataSource['dataSources'] = {};
|
||||
|
||||
|
||||
/**
|
||||
* Load or reload the backing data for this node.
|
||||
* Fires the JsonDataSource
|
||||
* @override
|
||||
*/
|
||||
goog.ds.JsonDataSource.prototype.load = function() {
|
||||
if (this.uri_) {
|
||||
// NOTE: "dataSources" is expose above by name so that it will not be
|
||||
// renamed. It should therefore be accessed via array notation here so
|
||||
// that it also doesn't get renamed and stops the compiler from complaining
|
||||
goog.ds.JsonDataSource['dataSources'][this.dataName_] = this;
|
||||
goog.log.info(goog.ds.logger, 'Sending JS request for DataSource ' +
|
||||
this.getDataName() + ' to ' + this.uri_);
|
||||
|
||||
this.loadState_ = goog.ds.LoadState.LOADING;
|
||||
|
||||
var uriToCall = new goog.Uri(this.uri_);
|
||||
uriToCall.setParameterValue(this.callbackParamName_,
|
||||
'JsonReceive.' + this.dataName_);
|
||||
|
||||
goog.global['JsonReceive'][this.dataName_] =
|
||||
goog.bind(this.receiveData, this);
|
||||
|
||||
var scriptEl = goog.dom.createDom('script', {'src': uriToCall});
|
||||
goog.dom.getElementsByTagNameAndClass('head')[0].appendChild(scriptEl);
|
||||
} else {
|
||||
this.root_ = {};
|
||||
this.loadState_ = goog.ds.LoadState.NOT_LOADED;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Gets the state of the backing data for this node
|
||||
* @return {goog.ds.LoadState} The state.
|
||||
* @override
|
||||
*/
|
||||
goog.ds.JsonDataSource.prototype.getLoadState = function() {
|
||||
return this.loadState_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Receives data from a Json request
|
||||
* @param {Object} obj The JSON data.
|
||||
*/
|
||||
goog.ds.JsonDataSource.prototype.receiveData = function(obj) {
|
||||
this.setRoot(obj);
|
||||
this.loadState_ = goog.ds.LoadState.LOADED;
|
||||
goog.ds.DataManager.getInstance().fireDataChange(this.getDataName());
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Temp variable to hold callbacks
|
||||
* until BUILD supports multiple externs.js files
|
||||
*/
|
||||
goog.global['JsonReceive'] = {};
|
||||
Reference in New Issue
Block a user