Subversion Repositories Applications.papyrus

Rev

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(); 
        }
}