From 64592e72787414959f26d0d2b899765eef7cc3b4 Mon Sep 17 00:00:00 2001 From: rolux Date: Fri, 30 Dec 2011 21:07:41 +0530 Subject: [PATCH] fix some localStorage bugs --- source/Ox.UI/js/Core/Ox.Theme.js | 2 +- source/Ox/js/Core.js | 20 ++++++++++++++------ source/Ox/js/Type.js | 3 +-- tools/build/build.py | 1 + 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/source/Ox.UI/js/Core/Ox.Theme.js b/source/Ox.UI/js/Core/Ox.Theme.js index c3e19491..f678fdb0 100644 --- a/source/Ox.UI/js/Core/Ox.Theme.js +++ b/source/Ox.UI/js/Core/Ox.Theme.js @@ -119,7 +119,7 @@ Ox.Theme = (function() { }); }); } - localStorage['Ox.theme'] = theme; + Ox.localStorage('Ox')('theme', theme); return that; } diff --git a/source/Ox/js/Core.js b/source/Ox/js/Core.js index 3e364dfc..ce435dea 100644 --- a/source/Ox/js/Core.js +++ b/source/Ox/js/Core.js @@ -127,31 +127,39 @@ Ox.load = function() { /*@ Ox.localStorage localStorage wrapper + () -> key:value pairs + (key) -> <*> value + (key, val) -> localStorage object + ({key, val}) -> localStorage object @*/ Ox.localStorage = function(namespace) { - if (Ox.isUndefined(localStorage)) { + // Ox.Log calls this before Ox.isUndefined is defined + if (localStorage === void 0) { localStorage = {}; } function storage(key, val) { var ret, value; - if (Ox.isUndefined(key)) { + if (arguments.length == 0) { ret = {}; Ox.forEach(localStorage, function(val, key) { if (Ox.startsWith(key, namespace + '.')) { ret[key.substr(namespace.length + 1)] = JSON.parse(val); } }); - } else if (Ox.isUndefined(val)) { + } else if (arguments.length == 1 && !Ox.isObject(key)) { value = localStorage[namespace + '.' + key]; ret = Ox.isUndefined(value) ? void 0 : JSON.parse(value); } else { - localStorage[namespace + '.' + key] = JSON.stringify(val); + args = Ox.makeObject(arguments); + Ox.forEach(args, function(val, key) { + localStorage[namespace + '.' + key] = JSON.stringify(val); + }); ret = this; } return ret; }; storage.delete = function(key) { - var keys = Ox.isUndefined(key) + var keys = arguments.length == 0 ? Object.keys(storage()) : [key]; keys.forEach(function(key) { @@ -166,7 +174,7 @@ Ox.Log Logging module @*/ Ox.Log = (function() { var storage = Ox.localStorage('Ox'), - log = storage('Log') || {filter: [], filterEnabled: true}; + log = storage('Log') || {filter: [], filterEnabled: true}, that = function() { var ret; if (arguments.length == 0) { diff --git a/source/Ox/js/Type.js b/source/Ox/js/Type.js index d9bb0a2a..8da157ff 100644 --- a/source/Ox/js/Type.js +++ b/source/Ox/js/Type.js @@ -291,8 +291,7 @@ Ox.isUndefined Tests if a value is undefined @*/ Ox.isUndefined = function(val) { - // fixme: val === void 0 is also nice - return typeof val == 'undefined'; + return val === void 0; }; /*@ diff --git a/tools/build/build.py b/tools/build/build.py index 55f661e7..e87bf29f 100755 --- a/tools/build/build.py +++ b/tools/build/build.py @@ -78,6 +78,7 @@ def build_oxjs(geo): write_link(link_source, link_target) # Ox.js + # FIXME: Document what exactly the following dependecies are! filenames = [ ['Fallback.js', 'Core.js'], ['Collection.js', 'Math.js']