This is an automated email from the ASF dual-hosted git repository. aharui pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit 39d6240c85c925edfe40165c7f830774d777babe Author: Alex Harui <[email protected]> AuthorDate: Fri Oct 18 22:40:58 2019 -0700 basic JS impl for local sharedobject --- .../src/main/royale/mx/net/SharedObject.as | 112 +++++++++++++++++++-- ...{SharedObject.as => SharedObjectFlushStatus.as} | 30 +----- 2 files changed, 107 insertions(+), 35 deletions(-) diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as b/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as index f83783a..ee794bb 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as @@ -20,27 +20,119 @@ package mx.net { - import org.apache.royale.events.EventDispatcher; +COMPILE::SWF +{ + import flash.net.SharedObject; +} + +import org.apache.royale.events.EventDispatcher; +import org.apache.royale.utils.string.trim; - public class SharedObject extends org.apache.royale.events.EventDispatcher - { +public class SharedObject extends org.apache.royale.events.EventDispatcher +{ + public static function getLocal(name:String, localPath:String = null, secure:Boolean = false):mx.net.SharedObject + { + var so:mx.net.SharedObject = new mx.net.SharedObject(); + so.setName(name); + so.setLocalPath(localPath); + COMPILE::SWF + { + so.createSO(); + } + return so; + } + + COMPILE::SWF + private var _so:flash.net.SharedObject; - - public static function getLocal(name:String, localPath:String = null, secure:Boolean = false):SharedObject - { - return null; - } public function flush(minDiskSpace:int = 0):String { - return null; + COMPILE::JS + { + if (_data) + { + var theseKeys:Object = {}; + for (var p:String in _data) + { + document.cookie = _name + p + '=' + _data[p]; + theseKeys[p] = 1; + } + var deleteKeys:Array = []; + for (p in keys) + { + if (!theseKeys[p]) + { + deleteKeys.push(p); + } + } + for each (p in deleteKeys) + { + delete keys[p]; + document.cookie = _name + p + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT'; + } + } + return SharedObjectFlushStatus.FLUSHED; + } + COMPILE::SWF + { + return _so.flush(minDiskSpace); + } } + private var keys:Object = {}; + + private var _data:Object; + public function get data():Object { - return null; + COMPILE::SWF + { + return _so.data; + } + COMPILE::JS + { + if (!_data) + { + _data = {}; + var allCookies:String = document.cookie; + var arrCookies:Array = allCookies.split(';'); + for each (var s:String in arrCookies) + { + s = trim(s); + var parts:Array = s.split('='); + if (parts[0].indexOf(_name) == 0) + { + var key:String = parts[0].substring(_name.length); + keys[key] = 1; + _data[key] = parts[1]; + } + } + } + return _data; + } } + + private var _name:String; + + public function setName(name:String):void + { + _name = name; + } + + private var _localPath:String; + + public function setLocalPath(localPath:String):void + { + _localPath = localPath; + } + + COMPILE::SWF + public function createSO():void + { + _so = flash.net.SharedObject.getLocal(_name, _localPath); + } } diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as b/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObjectFlushStatus.as similarity index 68% copy from frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as copy to frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObjectFlushStatus.as index f83783a..d95101a 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObjectFlushStatus.as @@ -20,29 +20,9 @@ package mx.net { - import org.apache.royale.events.EventDispatcher; - - - - public class SharedObject extends org.apache.royale.events.EventDispatcher - { - - - public static function getLocal(name:String, localPath:String = null, secure:Boolean = false):SharedObject - { - return null; - } - public function flush(minDiskSpace:int = 0):String - { - return null; - } - - public function get data():Object - { - return null; - } - } - - - +public class SharedObjectFlushStatus +{ + public static const PENDING:String = "pending"; + public static const FLUSHED:String = "flushed"; } +} \ No newline at end of file
