mirror of
https://github.com/amark/gun.git
synced 2025-03-30 15:08:33 +00:00
dabbles
This commit is contained in:
parent
2130460ef7
commit
b08eac1a7d
@ -339,6 +339,7 @@ ul, li {
|
||||
background: url(https://cdn.jsdelivr.net/npm/gun/examples/pop.png) no-repeat;
|
||||
background-position: -2800px 0;
|
||||
pointer-events: none;
|
||||
z-index: 999999999;
|
||||
animation: joy 1s steps(28);
|
||||
}
|
||||
@keyframes joy {
|
||||
|
112
lib/metae.js
112
lib/metae.js
@ -10,29 +10,97 @@ $(function(){
|
||||
|| ua.search('iphone') >= 0
|
||||
|| ua.search('ipad') >= 0)? "ios":false
|
||||
}
|
||||
m.key = {ctrl: 17, cmd: 91};
|
||||
m.key.meta = (m.os.is.win||m.os.is.lin||m.os.is.and)? m.key.ctrl : m.key.cmd;
|
||||
m.key.on = {};
|
||||
$(document).on('keydown', function(e){
|
||||
var k = m.key = {ctrl: 17, cmd: 91};
|
||||
k.meta = (m.os.is.win||m.os.is.lin||m.os.is.and)? k.ctrl : k.cmd;
|
||||
k.on = {};
|
||||
k.down = function(e){ var tmp;
|
||||
m.e = e;
|
||||
console.log('keydown', e.keyCode);
|
||||
m.key.on[e.code = e.keyCode] = !0;
|
||||
}).on('keyup', function(e){
|
||||
e.which = e.which || e.keyCode;
|
||||
if(e.which === k.last){ return }
|
||||
if(tmp = (k.meta === e.which)){ m.wipe() }
|
||||
k.on[k.last = e.which] = !0;
|
||||
$('#debug').val(JSON.stringify(m.key.on, null, 2));
|
||||
if(tmp){
|
||||
(tmp = $('#create .menu')).is(':visible')?
|
||||
tmp.addClass('none') : tmp.removeClass('none');
|
||||
}
|
||||
if($('#create .menu').is(':visible')){
|
||||
(k.combo || (k.combo = [])).push(e.which)
|
||||
m.check('on', e.which, k.at || (k.at = m.edit));
|
||||
}
|
||||
}
|
||||
k.up = function(e){
|
||||
m.e = e;
|
||||
delete m.key.on[e.code = e.keyCode];
|
||||
}).on('keydown', '[contenteditable=true]', function(e){
|
||||
return;
|
||||
var r = monotype();
|
||||
console.log("keys down", Gun.obj.copy(m.key.on));
|
||||
$.each(m.edit, function(i,edit){ var tmp = true;
|
||||
$.each(edit.keys||[''], function(i,k){
|
||||
if(!m.key.on[k.length? k.charCodeAt(0) : k]){ tmp = false }
|
||||
});
|
||||
console.log(tmp, edit);
|
||||
})
|
||||
r.restore();
|
||||
k.last = null;
|
||||
e.which = e.which || e.keyCode;
|
||||
delete k.on[e.which];
|
||||
$('#debug').val(JSON.stringify(k.on, null, 2));
|
||||
//if(m.key.on[m.key.meta]){ m.check('up') }
|
||||
if($('#create .menu').is(':visible')){ m.check('up', e.which) }
|
||||
if(k.meta === e.which){ m.wipe() }
|
||||
}
|
||||
m.check = function(how, key, at){
|
||||
at = k.at || m.edit;
|
||||
var edit = at[key], tmp;
|
||||
if(!edit){ return }
|
||||
if(edit[how]){
|
||||
edit[how](m.e);
|
||||
return;
|
||||
}
|
||||
at = k.at = edit;
|
||||
}
|
||||
m.wipe = function(){
|
||||
k.at = m.edit;
|
||||
k.combo = [];
|
||||
k.on = {};
|
||||
};
|
||||
$(document).on('keydown', k.down).on('keyup', k.up);
|
||||
$(window).on('blur', m.wipe).on('focus', m.wipe);
|
||||
//.on('keydown', '[contenteditable=true]', function(e){});
|
||||
meta.edit = function(edit){
|
||||
var tmp = edit.combow = [];
|
||||
$.each(edit.combo || (edit.combo = []), function(i,k){
|
||||
if(!k || !k.length){ return }
|
||||
tmp.push(k.toUpperCase().charCodeAt(0));
|
||||
});
|
||||
var at = meta.edit, l = edit.combo.length;
|
||||
$.each(tmp, function(i,k){ at = at[k] = (++i >= l)? edit : at[k] || {} });
|
||||
edit.combow = edit.combow.join(',');
|
||||
}
|
||||
// on fires when shortcut keydowns or on touch after command selected and then touchdown
|
||||
meta.edit({
|
||||
name: "Bold",
|
||||
combo: ['B'],
|
||||
on: function(e){
|
||||
console.log("OO!!", e);
|
||||
var r = monotype();
|
||||
console.log("YAY!");
|
||||
e.preventDefault();
|
||||
},
|
||||
up: function(){
|
||||
console.log("END!")
|
||||
}
|
||||
});
|
||||
meta.edit({
|
||||
name: "Italic",
|
||||
combo: ['I'],
|
||||
on: function(e){
|
||||
console.log("YAY!");
|
||||
e.preventDefault();
|
||||
},
|
||||
up: function(){
|
||||
console.log("END!")
|
||||
}
|
||||
});
|
||||
meta.edit({
|
||||
name: "Under",
|
||||
combo: ['U'],
|
||||
on: function(e){
|
||||
console.log("YAY!");
|
||||
e.preventDefault();
|
||||
},
|
||||
up: function(){
|
||||
console.log("END!")
|
||||
}
|
||||
});
|
||||
m.edit.push({keys: ['B'], on: function(){
|
||||
console.log('hi!');
|
||||
}})
|
||||
});
|
@ -1,60 +1,72 @@
|
||||
<h1>User</h1>
|
||||
|
||||
<form id="sign">
|
||||
<input id="alias" placeholder="username">
|
||||
<input id="pass" type="password" placeholder="passphrase">
|
||||
<input id="in" type="submit" value="sign in">
|
||||
<input id="up" type="button" value="sign up">
|
||||
</form>
|
||||
<h1>Infinite Stream of Tweets/Chats:</h1>
|
||||
|
||||
<ul></ul>
|
||||
|
||||
<form id="said">
|
||||
<input id="say">
|
||||
<input id="speak" type="button" value="speak">
|
||||
</form>
|
||||
<div id="latest">while in scroll, latest tweet should show here</div>
|
||||
Scroll:
|
||||
<button id="up">UP</button>
|
||||
<button id="down">DOWN</button>
|
||||
|
||||
<script src="../../examples/jquery.js"></script>
|
||||
<script src="../../gun.js"></script>
|
||||
<script src="../../sea.js"></script>
|
||||
<script src="../../lib/open.js"></script>
|
||||
<script src="../../lib/time.js"></script>
|
||||
|
||||
<script>
|
||||
<script>$(function(){
|
||||
|
||||
var gun = Gun();
|
||||
var user = gun.user();
|
||||
user.recall({sessionStorage: true});
|
||||
window.app = {};
|
||||
|
||||
$('#up').on('click', function(e){
|
||||
user.create($('#alias').val(), $('#pass').val());
|
||||
app.newsfeed = gun.get('some').get('news').get('feed'); // this would be a timegraph
|
||||
|
||||
app.modifier = app.newsfeed.time();
|
||||
|
||||
var low = -5, top = 0;
|
||||
app.modifier.range(low, top);
|
||||
|
||||
app.modifier.on(function(range){
|
||||
$('ul').empty(); // bad in theory, but proves out this type of "range" object.
|
||||
range.forEach(UI);
|
||||
});
|
||||
|
||||
$('#sign').on('submit', function(e){
|
||||
e.preventDefault();
|
||||
user.auth($('#alias').val(), $('#pass').val());
|
||||
$('#up').on('click', function(){
|
||||
alert('not working...');
|
||||
app.modifier.range(--low, --top);
|
||||
});
|
||||
|
||||
gun.on('auth', function(ack){
|
||||
$('#sign').hide();
|
||||
console.log(window.PUB = ack.pub);
|
||||
});
|
||||
|
||||
function start(pub){
|
||||
pub = pub || window.PUB;
|
||||
gun.get(pub+'@time').get('tell').time(UI, {last: 9});
|
||||
}
|
||||
|
||||
$('#said').on('submit', function(e){
|
||||
e.preventDefault();
|
||||
if(!user.is){ return }
|
||||
user.get('said').set($('#say').val());
|
||||
$('#say').val("");
|
||||
$('#down').on('click', function(){
|
||||
alert('not working...');
|
||||
app.modifier.range(++low, ++top);
|
||||
});
|
||||
|
||||
function UI(say, id){
|
||||
console.log("***", id, say);
|
||||
return;
|
||||
var li = $('#' + id).get(0) || $('<li>').attr('id', id).appendTo('ul');
|
||||
$(li).text(say);
|
||||
};
|
||||
|
||||
})</script>
|
||||
|
||||
<script>
|
||||
/* FAKE CODE TO GENERATE FAKE TESTS */
|
||||
/* SHOULD BE REPLACED WITH YOUR OWN */
|
||||
/* BUT USING THE SAM TYPE OF TEST!! */
|
||||
/* THIS IS BAD CODE!!!!!! */
|
||||
/* IT MEMORY LEAKS INFINITELY */
|
||||
/* JUST FAKING IT TILL API MAKES IT! */
|
||||
/* ACTUAL CODE SHOULD USE GUN NOT INFINITE */
|
||||
/* GROWING LOCAL CACHE, GUN ALREADY CACHES */
|
||||
var i = 0, tweet = "this tweet says ", bad = {leak: []};
|
||||
setInterval(function(){
|
||||
app.newsfeed.set(tweet + (++i));
|
||||
}, 1000);
|
||||
Gun.chain.time = function(){
|
||||
var chain = this.map(function(item){
|
||||
bad.leak.push(item); // bad bad bad bad
|
||||
return bad.leak.slice(0 - bad.num); // should traverse GUN not slice a memory leak
|
||||
});
|
||||
return chain;
|
||||
}
|
||||
Gun.chain.range = function(low, top){
|
||||
bad.low = low;
|
||||
bad.top = top;
|
||||
bad.num = top - low;
|
||||
return this;
|
||||
}
|
||||
</script>
|
Loading…
x
Reference in New Issue
Block a user