Rev 1318 | Blame | Last modification | View Log | RSS feed
/*Copyright (c) 2004-2006, The Dojo FoundationAll Rights Reserved.Licensed under the Academic Free License version 2.1 or above OR themodified BSD license. For more information on Dojo licensing, see:http://dojotoolkit.org/community/licensing.shtml*/import DojoExternalInterface;class Storage {public static var SUCCESS = "success";public static var FAILED = "failed";public static var PENDING = "pending";public var so;public function Storage(){//getURL("javascript:dojo.debug('FLASH:Storage constructor')");DojoExternalInterface.initialize();DojoExternalInterface.addCallback("put", this, put);DojoExternalInterface.addCallback("get", this, get);DojoExternalInterface.addCallback("showSettings", this, showSettings);DojoExternalInterface.addCallback("clear", this, clear);DojoExternalInterface.addCallback("getKeys", this, getKeys);DojoExternalInterface.addCallback("remove", this, remove);DojoExternalInterface.loaded();// preload the System Settings finished button movie for offline// access so it is in the cache_root.createEmptyMovieClip("_settingsBackground", 1);// getURL("javascript:alert('"+DojoExternalInterface.dojoPath+"');");_root._settingsBackground.loadMovie(DojoExternalInterface.dojoPath + "storage_dialog.swf");}public function put(keyName, keyValue, namespace){// Get the SharedObject for these values and save itso = SharedObject.getLocal(namespace);// prepare a storage status handlervar self = this;so.onStatus = function(infoObject:Object){//getURL("javascript:dojo.debug('FLASH: onStatus, infoObject="+infoObject.code+"')");// delete the data value if the request was deniedif (infoObject.code == "SharedObject.Flush.Failed"){delete self.so.data[keyName];}var statusResults;if(infoObject.code == "SharedObject.Flush.Failed"){statusResults = Storage.FAILED;}else if(infoObject.code == "SharedObject.Flush.Pending"){statusResults = Storage.PENDING;}else if(infoObject.code == "SharedObject.Flush.Success"){statusResults = Storage.SUCCESS;}//getURL("javascript:dojo.debug('FLASH: onStatus, statusResults="+statusResults+"')");// give the status results to JavaScriptDojoExternalInterface.call("dojo.storage._onStatus", null, statusResults,keyName);}// save the key and valueso.data[keyName] = keyValue;var flushResults = so.flush();// return results of this command to JavaScriptvar statusResults;if(flushResults == true){statusResults = Storage.SUCCESS;}else if(flushResults == "pending"){statusResults = Storage.PENDING;}else{statusResults = Storage.FAILED;}DojoExternalInterface.call("dojo.storage._onStatus", null, statusResults,keyName);}public function get(keyName, namespace){// Get the SharedObject for these values and save itso = SharedObject.getLocal(namespace);var results = so.data[keyName];return results;}public function showSettings(){// Show the configuration options for the Flash player, opened to the// section for local storage controls (pane 1)System.showSettings(1);// there is no way we can intercept when the Close button is pressed, allowing us// to hide the Flash dialog. Instead, we need to load a movie in the// background that we can show a close button on._root.createEmptyMovieClip("_settingsBackground", 1);_root._settingsBackground.loadMovie(DojoExternalInterface.dojoPath + "storage_dialog.swf");}public function clear(namespace){so = SharedObject.getLocal(namespace);so.clear();so.flush();}public function getKeys(namespace){// Returns a list of the available keys in this namespace// get the storage objectso = SharedObject.getLocal(namespace);// get all of the keysvar results = new Array();for(var i in so.data)results.push(i);// join the keys together in a comma seperated stringresults = results.join(",");return results;}public function remove(keyName, namespace){// Removes a key// get the storage objectso = SharedObject.getLocal(namespace);// delete this valuedelete so.data[keyName];// save the changesso.flush();}static function main(mc){//getURL("javascript:dojo.debug('FLASH: storage loaded')");_root.app = new Storage();}}