Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dojox.storage.Provider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.storage.Provider"] = true;dojo.provide("dojox.storage.Provider");dojo.declare("dojox.storage.Provider", null, {// summary: A singleton for working with dojox.storage.// description:// dojox.storage exposes the current available storage provider on this// platform. It gives you methods such as dojox.storage.put(),// dojox.storage.get(), etc.//// For more details on dojox.storage, see the primary documentation// page at// http://manual.dojotoolkit.org/storage.html//// Note for storage provider developers who are creating subclasses-// This is the base class for all storage providers Specific kinds of// Storage Providers should subclass this and implement these methods.// You should avoid initialization in storage provider subclass's// constructor; instead, perform initialization in your initialize()// method.constructor: function(){},// SUCCESS: String// Flag that indicates a put() call to a// storage provider was succesful.SUCCESS: "success",// FAILED: String// Flag that indicates a put() call to// a storage provider failed.FAILED: "failed",// PENDING: String// Flag that indicates a put() call to a// storage provider is pending user approval.PENDING: "pending",// SIZE_NOT_AVAILABLE: String// Returned by getMaximumSize() if this storage provider can not determine// the maximum amount of data it can support.SIZE_NOT_AVAILABLE: "Size not available",// SIZE_NO_LIMIT: String// Returned by getMaximumSize() if this storage provider has no theoretical// limit on the amount of data it can store.SIZE_NO_LIMIT: "No size limit",// DEFAULT_NAMESPACE: String// The namespace for all storage operations. This is useful if several// applications want access to the storage system from the same domain but// want different storage silos.DEFAULT_NAMESPACE: "default",// onHideSettingsUI: Function// If a function is assigned to this property, then when the settings// provider's UI is closed this function is called. Useful, for example,// if the user has just cleared out all storage for this provider using// the settings UI, and you want to update your UI.onHideSettingsUI: null,initialize: function(){// summary:// Allows this storage provider to initialize itself. This is// called after the page has finished loading, so you can not do// document.writes(). Storage Provider subclasses should initialize// themselves inside of here rather than in their function// constructor.console.warn("dojox.storage.initialize not implemented");},isAvailable: function(){ /*Boolean*/// summary:// Returns whether this storage provider is available on this// platform.console.warn("dojox.storage.isAvailable not implemented");},put: function( /*string*/ key,/*object*/ value,/*function*/ resultsHandler,/*string?*/ namespace){// summary:// Puts a key and value into this storage system.// description:// Example-// var resultsHandler = function(status, key, message){// alert("status="+status+", key="+key+", message="+message);// };// dojox.storage.put("test", "hello world", resultsHandler);//// Important note: if you are using Dojo Storage in conjunction with// Dojo Offline, then you don't need to provide// a resultsHandler; this is because for Dojo Offline we// use Google Gears to persist data, which has unlimited data// once the user has given permission. If you are using Dojo// Storage apart from Dojo Offline, then under the covers hidden// Flash might be used, which is both asychronous and which might// get denied; in this case you must provide a resultsHandler.// key:// A string key to use when retrieving this value in the future.// value:// A value to store; this can be any JavaScript type.// resultsHandler:// A callback function that will receive three arguments. The// first argument is one of three values: dojox.storage.SUCCESS,// dojox.storage.FAILED, or dojox.storage.PENDING; these values// determine how the put request went. In some storage systems// users can deny a storage request, resulting in a// dojox.storage.FAILED, while in other storage systems a storage// request must wait for user approval, resulting in a// dojox.storage.PENDING status until the request is either// approved or denied, resulting in another call back with// dojox.storage.SUCCESS.// The second argument in the call back is the key name that was being stored.// The third argument in the call back is an optional message that// details possible error messages that might have occurred during// the storage process.// namespace:// Optional string namespace that this value will be placed into;// if left off, the value will be placed into dojox.storage.DEFAULT_NAMESPACEconsole.warn("dojox.storage.put not implemented");},get: function(/*string*/ key, /*string?*/ namespace){ /*Object*/// summary:// Gets the value with the given key. Returns null if this key is// not in the storage system.// key:// A string key to get the value of.// namespace:// Optional string namespace that this value will be retrieved from;// if left off, the value will be retrieved from dojox.storage.DEFAULT_NAMESPACE// return: Returns any JavaScript object type; null if the key is not presentconsole.warn("dojox.storage.get not implemented");},hasKey: function(/*string*/ key, /*string?*/ namespace){ /*Boolean*/// summary: Determines whether the storage has the given key.return (this.get(key) != null);},getKeys: function(/*string?*/ namespace){ /*Array*/// summary: Enumerates all of the available keys in this storage system.// return: Array of available keysconsole.warn("dojox.storage.getKeys not implemented");},clear: function(/*string?*/ namespace){// summary:// Completely clears this storage system of all of it's values and// keys. If 'namespace' is provided just clears the keys in that// namespace.console.warn("dojox.storage.clear not implemented");},remove: function(/*string*/ key, /*string?*/ namespace){// summary: Removes the given key from this storage system.console.warn("dojox.storage.remove not implemented");},getNamespaces: function(){ /*string[]*/console.warn("dojox.storage.getNamespaces not implemented");},isPermanent: function(){ /*Boolean*/// summary:// Returns whether this storage provider's values are persisted// when this platform is shutdown.console.warn("dojox.storage.isPermanent not implemented");},getMaximumSize: function(){ /* mixed */// summary: The maximum storage allowed by this provider// returns:// Returns the maximum storage size// supported by this provider, in// thousands of bytes (i.e., if it// returns 60 then this means that 60K// of storage is supported).//// If this provider can not determine// it's maximum size, then// dojox.storage.SIZE_NOT_AVAILABLE is// returned; if there is no theoretical// limit on the amount of storage// this provider can return, then// dojox.storage.SIZE_NO_LIMIT is// returnedconsole.warn("dojox.storage.getMaximumSize not implemented");},putMultiple: function( /*array*/ keys,/*array*/ values,/*function*/ resultsHandler,/*string?*/ namespace){// summary:// Puts multiple keys and values into this storage system.// description:// Example-// var resultsHandler = function(status, key, message){// alert("status="+status+", key="+key+", message="+message);// };// dojox.storage.put(["test"], ["hello world"], resultsHandler);//// Important note: if you are using Dojo Storage in conjunction with// Dojo Offline, then you don't need to provide// a resultsHandler; this is because for Dojo Offline we// use Google Gears to persist data, which has unlimited data// once the user has given permission. If you are using Dojo// Storage apart from Dojo Offline, then under the covers hidden// Flash might be used, which is both asychronous and which might// get denied; in this case you must provide a resultsHandler.// keys:// An array of string keys to use when retrieving this value in the future,// one per value to be stored// values:// An array of values to store; this can be any JavaScript type, though the// performance of plain strings is considerably better// resultsHandler:// A callback function that will receive three arguments. The// first argument is one of three values: dojox.storage.SUCCESS,// dojox.storage.FAILED, or dojox.storage.PENDING; these values// determine how the put request went. In some storage systems// users can deny a storage request, resulting in a// dojox.storage.FAILED, while in other storage systems a storage// request must wait for user approval, resulting in a// dojox.storage.PENDING status until the request is either// approved or denied, resulting in another call back with// dojox.storage.SUCCESS.// The second argument in the call back is the key name that was being stored.// The third argument in the call back is an optional message that// details possible error messages that might have occurred during// the storage process.// namespace:// Optional string namespace that this value will be placed into;// if left off, the value will be placed into dojox.storage.DEFAULT_NAMESPACEconsole.warn("dojox.storage.putMultiple not implemented");// JAC: We could implement a 'default' puMultiple here by just doing each put individually},getMultiple: function(/*array*/ keys, /*string?*/ namespace){ /*Object*/// summary:// Gets the valuse corresponding to each of the given keys.// Returns a null array element for each given key that is// not in the storage system.// keys:// An array of string keys to get the value of.// namespace:// Optional string namespace that this value will be retrieved from;// if left off, the value will be retrieved from dojox.storage.DEFAULT_NAMESPACE// return: Returns any JavaScript object type; null if the key is not presentconsole.warn("dojox.storage.getMultiple not implemented");// JAC: We could implement a 'default' getMultiple here by just doing each get individually},removeMultiple: function(/*array*/ keys, /*string?*/ namespace) {// summary: Removes the given keys from this storage system.// JAC: We could implement a 'default' removeMultiple here by just doing each remove individuallyconsole.warn("dojox.storage.remove not implemented");},isValidKeyArray: function( keys) {if(keys === null || typeof keys === "undefined" || ! keys instanceof Array){return false;}// JAC: This could be optimized by running the key validity test directly over a joined stringfor(var k=0;k<keys.length;k++){if(!this.isValidKey(keys[k])){return false;}}return true;},hasSettingsUI: function(){ /*Boolean*/// summary: Determines whether this provider has a settings UI.return false;},showSettingsUI: function(){// summary: If this provider has a settings UI, determined// by calling hasSettingsUI(), it is shown.console.warn("dojox.storage.showSettingsUI not implemented");},hideSettingsUI: function(){// summary: If this provider has a settings UI, hides it.console.warn("dojox.storage.hideSettingsUI not implemented");},isValidKey: function(/*string*/ keyName){ /*Boolean*/// summary:// Subclasses can call this to ensure that the key given is valid// in a consistent way across different storage providers. We use// the lowest common denominator for key values allowed: only// letters, numbers, and underscores are allowed. No spaces.if((keyName == null)||(typeof keyName == "undefined")){return false;}return /^[0-9A-Za-z_]*$/.test(keyName);},getResourceList: function(){ /* Array[] */// summary:// Returns a list of URLs that this// storage provider might depend on.// description:// This method returns a list of URLs that this// storage provider depends on to do its work.// This list is used by the Dojo Offline Toolkit// to cache these resources to ensure the machinery// used by this storage provider is available offline.// What is returned is an array of URLs.return [];}});}