mirror of
https://github.com/amark/gun.git
synced 2025-05-31 19:26:42 +00:00
40 lines
795 B
JavaScript
40 lines
795 B
JavaScript
|
|
var Gun = require('./root');
|
|
Gun.chain.back = function(n, opt){ var tmp;
|
|
n = n || 1;
|
|
if(-1 === n || Infinity === n){
|
|
return this._.root.$;
|
|
} else
|
|
if(1 === n){
|
|
return (this._.back || this._).$;
|
|
}
|
|
var gun = this, at = gun._;
|
|
if(typeof n === 'string'){
|
|
n = n.split('.');
|
|
}
|
|
if(n instanceof Array){
|
|
var i = 0, l = n.length, tmp = at;
|
|
for(i; i < l; i++){
|
|
tmp = (tmp||empty)[n[i]];
|
|
}
|
|
if(u !== tmp){
|
|
return opt? gun : tmp;
|
|
} else
|
|
if((tmp = at.back)){
|
|
return tmp.$.back(n, opt);
|
|
}
|
|
return;
|
|
}
|
|
if(n instanceof Function){
|
|
var yes, tmp = {back: at};
|
|
while((tmp = tmp.back)
|
|
&& u === (yes = n(tmp, opt))){}
|
|
return yes;
|
|
}
|
|
if(Gun.num.is(n)){
|
|
return (at.back || at).$.back(n - 1);
|
|
}
|
|
return this;
|
|
}
|
|
var empty = {}, u;
|
|
|