Rev 1318 | Blame | Last modification | View Log | RSS feed
/*
Copyright (c) 2004-2006, The Dojo Foundation
All Rights Reserved.
Licensed under the Academic Free License version 2.1 or above OR the
modified 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 it
so = SharedObject.getLocal(namespace);
// prepare a storage status handler
var self = this;
so.onStatus = function(infoObject:Object){
//getURL("javascript:dojo.debug('FLASH: onStatus, infoObject="+infoObject.code+"')");
// delete the data value if the request was denied
if (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 JavaScript
DojoExternalInterface.call("dojo.storage._onStatus", null, statusResults,
keyName);
}
// save the key and value
so.data[keyName] = keyValue;
var flushResults = so.flush();
// return results of this command to JavaScript
var 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 it
so = 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 object
so = SharedObject.getLocal(namespace);
// get all of the keys
var results = new Array();
for(var i in so.data)
results.push(i);
// join the keys together in a comma seperated string
results = results.join(",");
return results;
}
public function remove(keyName, namespace){
// Removes a key
// get the storage object
so = SharedObject.getLocal(namespace);
// delete this value
delete so.data[keyName];
// save the changes
so.flush();
}
static function main(mc){
//getURL("javascript:dojo.debug('FLASH: storage loaded')");
_root.app = new Storage();
}
}