📄 flashstorageprovider.js
字号:
if(!dojo._hasResource["dojox.storage.FlashStorageProvider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.storage.FlashStorageProvider"] = true;dojo.provide("dojox.storage.FlashStorageProvider");dojo.require("dojox.flash");dojo.require("dojox.storage.manager");dojo.require("dojox.storage.Provider");// summary: // Storage provider that uses features in Flash to achieve permanent// storage// description:// Authors of this storage provider-// Brad Neuberg, bkn3@columbia.edu dojo.declare("dojox.storage.FlashStorageProvider", dojox.storage.Provider, { initialized: false, _available: null, _statusHandler: null, _flashReady: false, _pageReady: false, initialize: function(){ //console.debug("FlashStorageProvider.initialize"); if(dojo.config["disableFlashStorage"] == true){ return; } // initialize our Flash dojox.flash.addLoadedListener(dojo.hitch(this, function(){ //console.debug("flashReady"); // indicate our Flash subsystem is now loaded this._flashReady = true; if(this._flashReady && this._pageReady){ this._loaded(); } })); var swfLoc = dojo.moduleUrl("dojox", "storage/Storage.swf").toString(); dojox.flash.setSwf(swfLoc, false); // wait till page is finished loading dojo.connect(dojo, "loaded", this, function(){ //console.debug("pageReady"); this._pageReady = true; if(this._flashReady && this._pageReady){ this._loaded(); } }); }, // Set a new value for the flush delay timer. // Possible values: // 0 : Perform the flush synchronously after each "put" request // > 0 : Wait until 'newDelay' ms have passed without any "put" request to flush // -1 : Do not automatically flush setFlushDelay: function(newDelay){ if(newDelay === null || typeof newDelay === "undefined" || isNaN(newDelay)){ throw new Error("Invalid argunment: " + newDelay); } dojox.flash.comm.setFlushDelay(String(newDelay)); }, getFlushDelay: function(){ return Number(dojox.flash.comm.getFlushDelay()); }, flush: function(namespace){ //FIXME: is this test necessary? Just use !namespace if(namespace == null || typeof namespace == "undefined"){ namespace = dojox.storage.DEFAULT_NAMESPACE; } dojox.flash.comm.flush(namespace); }, isAvailable: function(){ return (this._available = !dojo.config["disableFlashStorage"]); }, put: function(key, value, resultsHandler, namespace){ if(!this.isValidKey(key)){ throw new Error("Invalid key given: " + key); } if(!namespace){ namespace = dojox.storage.DEFAULT_NAMESPACE; } if(!this.isValidKey(namespace)){ throw new Error("Invalid namespace given: " + namespace); } this._statusHandler = resultsHandler; // serialize the value; // handle strings differently so they have better performance if(dojo.isString(value)){ value = "string:" + value; }else{ value = dojo.toJson(value); } dojox.flash.comm.put(key, value, namespace); }, putMultiple: function(keys, values, resultsHandler, namespace){ if(!this.isValidKeyArray(keys) || ! values instanceof Array || keys.length != values.length){ throw new Error("Invalid arguments: keys = [" + keys + "], values = [" + values + "]"); } if(!namespace){ namespace = dojox.storage.DEFAULT_NAMESPACE; } if(!this.isValidKey(namespace)){ throw new Error("Invalid namespace given: " + namespace); } this._statusHandler = resultsHandler; // Convert the arguments on strings we can pass along to Flash var metaKey = keys.join(","); var lengths = []; for(var i=0;i<values.length;i++){ if(dojo.isString(values[i])){ values[i] = "string:" + values[i]; }else{ values[i] = dojo.toJson(values[i]); } lengths[i] = values[i].length; } var metaValue = values.join(""); var metaLengths = lengths.join(","); dojox.flash.comm.putMultiple(metaKey, metaValue, metaLengths, this.namespace); }, get: function(key, namespace){ if(!this.isValidKey(key)){ throw new Error("Invalid key given: " + key); } if(!namespace){ namespace = dojox.storage.DEFAULT_NAMESPACE; } if(!this.isValidKey(namespace)){ throw new Error("Invalid namespace given: " + namespace); } var results = dojox.flash.comm.get(key, namespace); if(results == ""){ return null; } return this._destringify(results); }, getMultiple: function(/*array*/ keys, /*string?*/ namespace){ /*Object*/ if(!this.isValidKeyArray(keys)){ throw new ("Invalid key array given: " + keys); } if(!namespace){ namespace = dojox.storage.DEFAULT_NAMESPACE; } if(!this.isValidKey(namespace)){ throw new Error("Invalid namespace given: " + namespace); } var metaKey = keys.join(","); var metaResults = dojox.flash.comm.getMultiple(metaKey, this.namespace); var results = eval("(" + metaResults + ")"); // destringify each entry back into a real JS object //FIXME: use dojo.map for(var i = 0; i < results.length; i++){ results[i] = (results[i] == "") ? null : this._destringify(results[i]); } return results; }, _destringify: function(results){ // destringify the content back into a // real JavaScript object; // handle strings differently so they have better performance if(dojo.isString(results) && (/^string:/.test(results))){ results = results.substring("string:".length); }else{ results = dojo.fromJson(results); } return results; }, getKeys: function(namespace){ if(!namespace){ namespace = dojox.storage.DEFAULT_NAMESPACE; } if(!this.isValidKey(namespace)){ throw new Error("Invalid namespace given: " + namespace); } var results = dojox.flash.comm.getKeys(namespace); // Flash incorrectly returns an empty string as "null" if(results == null || results == "null"){ results = ""; } results = results.split(","); results.sort(); return results; }, getNamespaces: function(){ var results = dojox.flash.comm.getNamespaces(); // Flash incorrectly returns an empty string as "null" if(results == null || results == "null"){ results = dojox.storage.DEFAULT_NAMESPACE; } results = results.split(","); results.sort(); return results; }, clear: function(namespace){ if(!namespace){ namespace = dojox.storage.DEFAULT_NAMESPACE; } if(!this.isValidKey(namespace)){ throw new Error("Invalid namespace given: " + namespace); } dojox.flash.comm.clear(namespace); }, remove: function(key, namespace){ if(!namespace){ namespace = dojox.storage.DEFAULT_NAMESPACE; } if(!this.isValidKey(namespace)){ throw new Error("Invalid namespace given: " + namespace); } dojox.flash.comm.remove(key, namespace); }, removeMultiple: function(/*array*/ keys, /*string?*/ namespace){ /*Object*/ if(!this.isValidKeyArray(keys)){ dojo.raise("Invalid key array given: " + keys); } if(!namespace){ namespace = dojox.storage.DEFAULT_NAMESPACE; } if(!this.isValidKey(namespace)){ throw new Error("Invalid namespace given: " + namespace); } var metaKey = keys.join(","); dojox.flash.comm.removeMultiple(metaKey, this.namespace); }, isPermanent: function(){ return true; }, getMaximumSize: function(){ return dojox.storage.SIZE_NO_LIMIT; }, hasSettingsUI: function(){ return true; }, showSettingsUI: function(){ dojox.flash.comm.showSettings(); dojox.flash.obj.setVisible(true); dojox.flash.obj.center(); }, hideSettingsUI: function(){ // hide the dialog dojox.flash.obj.setVisible(false); // call anyone who wants to know the dialog is // now hidden if(dojo.isFunction(dojox.storage.onHideSettingsUI)){ dojox.storage.onHideSettingsUI.call(null); } }, getResourceList: function(){ /* Array[] */ // Dojo Offline no longer uses the FlashStorageProvider for offline // storage; Gears is now required return []; }, /** Called when Flash and the page are finished loading. */ _loaded: function(){ // get available namespaces this._allNamespaces = this.getNamespaces(); this.initialized = true; // indicate that this storage provider is now loaded dojox.storage.manager.loaded(); }, // Called if the storage system needs to tell us about the status // of a put() request. _onStatus: function(statusResult, key, namespace){ //console.debug("onStatus, statusResult="+statusResult+", key="+key); var ds = dojox.storage; var dfo = dojox.flash.obj; if(statusResult == ds.PENDING){ dfo.center(); dfo.setVisible(true); }else{ dfo.setVisible(false); } if(ds._statusHandler){ ds._statusHandler.call(null, statusResult, key, namespace); } } });dojox.storage.manager.register("dojox.storage.FlashStorageProvider", new dojox.storage.FlashStorageProvider());}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -