diff --git a/gun.js b/gun.js index b56991d5..70dcd0a5 100644 --- a/gun.js +++ b/gun.js @@ -802,8 +802,24 @@ } Gun.on.get = function(msg, gun){ - var root = gun._, soul = msg.get[_soul], node = root.graph[soul], has = msg.get[_has], tmp; + var root = gun._, get = msg.get, soul = get[_soul], node = root.graph[soul], has = get[_has], tmp; var next = root.next || (root.next = {}), at = next[soul]; + if(get['*']){ // TEMPORARY HACK FOR MARTTI, TESTING + var graph = {}; + Gun.obj.map(root.graph, function(node, soul){ + if(Gun.text.match(soul, get)){ + graph[soul] = Gun.obj.copy(node); + } + }); + if(!Gun.obj.empty(graph)){ + root.on('in', { + '@': msg['#'], + how: '*', + put: graph, + $: gun + }); + } + } // TEMPORARY HACK FOR MARTTI, TESTING if(!node || !at){ return root.on('get', msg) } if(has){ if(!obj_has(node, has)){ return root.on('get', msg) } diff --git a/lib/space.js b/lib/space.js new file mode 100644 index 00000000..a36ed7a0 --- /dev/null +++ b/lib/space.js @@ -0,0 +1,78 @@ +;(function(){ + var Gun = (typeof window !== "undefined")? window.Gun : require('../gun'); + var ify = Gun.node.ify, empty = {}, u; + Gun.chain.space = function(key, data, opt){ + if(data instanceof Function){ + return travel(key, data, opt, this); + } + var gun = this; + if(Gun.is(data)){ + data.get(function(soul){ + if(!soul){ + return cb && cb({err: "Indexspace cannot link `undefined`!"}); + } + gun.space(key, Gun.val.link.ify(soul), opt); + }, true); + return gun; + } + var cb = (opt instanceof Function && opt), rank = (opt||empty).rank || opt, tmp; + gun.get(function(soul){ + if(!soul){ + soul = (gun.back('opt.uuid') || Gun.text.random)(9); + } + var space = ify({}, soul), sub = space, l = 0, tmp; + Gun.list.map(index(0, key.length), function(i){ + sub[(tmp = key.slice(l, i))+'"'] = data; + sub = sub[tmp] = ify({}, soul+'"'+key.slice(0,i)); + l = i; + }); + tmp = {}; tmp[key] = data; tmp = ify(tmp, soul+'"'); + sub[key.slice(l, key.length)] = tmp; + //console.log(space); + gun.put(space, cb); + },true); + return gun; + } + function travel(key, cb, opt, ref){ + var root = ref.back(-1), tmp; + opt = opt || {}; + ref.get(function(soul){ + root.get(soul+'"').get(key).get(function(msg, eve){ + if(u !== msg.put){ + eve.off(); + cb(msg.put, msg.get, msg, eve); + return; + } + opt.soul = soul; + opt.start = soul+'"'; + opt.key = key; + opt.top = index(0, opt.find); + opt.low = opt.top.reverse(); + find(opt, cb, root); + }); + }, true) + } + function find(o, cb, root){ + var id = o.start+o.key.slice(0,o.low[0]); + root.get(id).get(function(msg, eve){ + eve.off(); + console.log("oh my!", msg.put, o.start); + }); + } + function index(n, m, l, k){ + l = l || []; + if(!m){ return l } + k = Math.ceil((n||1) / 10); + if((n+k) >= m){ return l } + l.push(n + k); + return index(n + k, m, l); + } +}()); + +/* +gun.user('google').space('martti', "testing 123!"); +gun.user('google').get('search').space('ma', function(){ + // tree & index + // UNFINISHED API! +}); +*/ diff --git a/sea.js b/sea.js index d49165d3..79e3dced 100644 --- a/sea.js +++ b/sea.js @@ -1269,6 +1269,11 @@ delete user._.is; delete user._.sea; } + if(typeof window !== 'undefined'){ + var tmp = window.sessionStorage; + delete tmp.alias; + delete tmp.tmp; + } return await authLeave(this.back(-1)) } // If authenticated user wants to delete his/her account, let's support it!