mirror of
https://github.com/amark/gun.git
synced 2025-03-30 15:08:33 +00:00
198 lines
5.0 KiB
JavaScript
198 lines
5.0 KiB
JavaScript
module.exports=require('theory')
|
|
('shoot',function(a){
|
|
if(root.node){
|
|
var shot = require('../../shots0')({src: a.com, batch: 999}).pump(function(g, m, done){
|
|
console.log('>>> pump!');
|
|
done();
|
|
});
|
|
return shot.spray(function(g, m, done){
|
|
console.log('>>> shoot!');
|
|
var gPrime = {};
|
|
done(gPrime); // allow me to send custom modified filtered version
|
|
//console.log(g());
|
|
});
|
|
}
|
|
var shoot = {}
|
|
, shot = a.shot()
|
|
, the = a.discrete
|
|
, $graph = $("#graph")
|
|
, $node = $("#model-node")
|
|
, $has = $("#model-has")
|
|
, $ref = $("#model-ref")
|
|
, $sub = $("#model-obj")
|
|
, $url = $('body>.id')
|
|
, g;
|
|
shoot.clone = function($e, $to, id, name){
|
|
var $r = $e.clone().attr('id',id).appendTo($to);
|
|
name = name || id;
|
|
if(name){ $r.attr('name', name) }
|
|
return $r;
|
|
}
|
|
shoot.graph = function(g, url){
|
|
if(url){ $url.text(url) }
|
|
a.obj(g).each(function(n,id){
|
|
var $n = $node.clone().attr('id',id).attr('name',id).appendTo($graph);
|
|
$('.id', $n).text(id);
|
|
shoot.field($('.sub', $n), n);
|
|
});
|
|
$('.node .sub .sub').slideUp();
|
|
}
|
|
shoot.field = function($n, n, p){
|
|
a.obj(n).each(function(val,key){
|
|
if(key === '_'){ return }
|
|
if(a.obj.is(val)){
|
|
var $val = shoot.clone($sub, $n, key);
|
|
$('.key', $val).text(key);
|
|
shoot.field($('.sub', $val), val);
|
|
} else {
|
|
var $val = shoot.clone($has, $n, key)
|
|
, $v = $('.val', $val).text(val);
|
|
$('.key', $val).text(key);
|
|
if(a.bi.is(val)){
|
|
$v.addClass('binary');
|
|
} else
|
|
if(a.num.is(val)){
|
|
$v.addClass('number');
|
|
} else
|
|
if(a.text.is(val)){
|
|
$v.addClass('text');
|
|
}
|
|
}
|
|
});
|
|
}
|
|
shot.load('gunjs.herokuapp.com/tests/package.json',function(graph){
|
|
if(!graph){ return $url.text("Something went wrong :( please reload.") }
|
|
g = graph;
|
|
window.graphbug = g;
|
|
console.log('graph', g());
|
|
shoot.graph(g(), 'Graph');
|
|
});
|
|
require('./interface')(function(){});
|
|
$(document).on('keyboard',function(){
|
|
var the = theory.discrete
|
|
, key = theory.key, u;
|
|
key.map({
|
|
'up': 'prev'
|
|
,'down': 'next'
|
|
,'right': 'open'
|
|
,'left': 'close'
|
|
,'enter': 'add'
|
|
,'erase': 'remove'
|
|
});
|
|
$(document).on('keyup','[contenteditable="true"]',function(e){
|
|
if(!g){ return }
|
|
e.where = this;
|
|
var $v = $(e.where).find('.val').addBack('.val')
|
|
, p = shoot.path($v), val, v;
|
|
if(!p){ return }
|
|
val = g(p);
|
|
if(val === u){ return }
|
|
v = $v.text();
|
|
v = (v === 'true')? true : v;
|
|
v = (v === 'false')? false : v;
|
|
v = (a.num.is(parseFloat(v)))? parseFloat(v) : v;
|
|
if(val === v){ return }
|
|
console.log("EDIT FINALLY", p, val, v, (val === v));
|
|
g(p,v);
|
|
});
|
|
the.key('enter').up(function(e){
|
|
if(!g || the.key.tame()){ return }
|
|
},document);
|
|
the.key('erase').down(function(e){
|
|
if(the.key.tame()){ return }
|
|
e.stun(); e.stop();
|
|
},document);
|
|
the.key('erase').up(function(e){
|
|
e.stun(); e.stop();
|
|
if(!g || the.key.tame()){ return }
|
|
var $v = $('.on')
|
|
, p = shoot.path($v)
|
|
, val;
|
|
if(!p){ return }
|
|
val = g(p);
|
|
if(val === u){ return }
|
|
g(p,null);
|
|
shoot.nav();
|
|
$v.closest('.field').remove();
|
|
},document);
|
|
shoot.path = function($e){
|
|
return $e.parents().addBack().map(function(){
|
|
return $(this).attr('name')
|
|
}).get().join('.');
|
|
}
|
|
shoot.nav = function(dir){
|
|
if(the.key.tame()){ return }
|
|
var f = '.field', c = 'on', g = $graph;
|
|
var x = dir? 'prev' : 'next', y = dir? 'last' : 'first';
|
|
var on = $('.'+c, g), n;
|
|
if(!on.length){
|
|
return on = $(f, g)[y]().addClass(c);
|
|
}
|
|
if(dir){
|
|
n = on.prev(f);
|
|
if(!n.length){
|
|
n = null;
|
|
}
|
|
}
|
|
n = (n||on).find(f+':visible')[y]();
|
|
if(!n.length){
|
|
n = on[x](f);
|
|
}
|
|
if(!n.length){
|
|
n = on.parents(f).first();
|
|
if(!dir){
|
|
n = n[x](f)[y]();
|
|
}
|
|
if(!n.length){
|
|
n = $(f, g)[y]();
|
|
}
|
|
}
|
|
on.removeClass(c);
|
|
n.addClass(c);
|
|
}
|
|
the.key('down').hold(function(e){
|
|
shoot.nav();
|
|
});
|
|
the.key('up').hold(function(e){
|
|
shoot.nav(-1);
|
|
});
|
|
the.key('right').up(function(e){
|
|
shoot.nav.out = false;
|
|
if(the.key.tame()){ return }
|
|
var on = $('.on', $graph);
|
|
if(!on.children('.sub').length){
|
|
return on.children('.val').focus();
|
|
}
|
|
on.children('.sub').slideDown();
|
|
});
|
|
the.key('left').up(function(e){
|
|
var on = $('.on', $graph), n;
|
|
if(the.key.tame()){
|
|
if(shoot.nav.out){
|
|
return $('.val',on).trigger('blur');
|
|
}
|
|
a.test(function(){
|
|
var s = window.getSelection()
|
|
, r = s.getRangeAt(0);
|
|
if(!r.startOffset){
|
|
shoot.nav.out = true;
|
|
}
|
|
})();
|
|
return;
|
|
}
|
|
if(on.find('.field:visible').length){
|
|
return $('.sub',on).slideUp();
|
|
}
|
|
n = on.parents('.field').first();
|
|
if(!n.length){ return }
|
|
on.removeClass('on');
|
|
on = n.addClass('on');
|
|
$('.sub',on).slideUp();
|
|
});
|
|
the.mouse.up(function(e){
|
|
$('.on').removeClass('on');
|
|
$(e.where).closest('.field').addClass('on');
|
|
},'.field');
|
|
});
|
|
return shot.spray;
|
|
},['../../shot0']); |