create a helper for cancellable Gun.chain.on callbacks

This commit is contained in:
Jesse D. McDonald 2020-03-29 00:29:47 -05:00
parent c7c1905f9d
commit b5c830ab68
1 changed files with 65 additions and 56 deletions

View File

@ -44,6 +44,31 @@ $(function (){
let cancelGameCallback = function() {}; let cancelGameCallback = function() {};
let cancelMetaCallback = function() {}; let cancelMetaCallback = function() {};
Gun.chain.onWithCancel = (function() {
function cancelCallback(data,key,msg,ev) {
if (ev && typeof ev.off === 'function') {
ev.off();
}
}
return function(tag, arg, eas, as) {
if (typeof tag === 'function') {
let callback = tag;
const cancelEv = function() {
callback = cancelCallback;
};
const wrapper = function() {
return callback.apply(this, arguments);
};
this.on(wrapper, arg, eas, as);
return cancelEv;
} else {
this.on(tag, arg, eas, as);
return null;
}
};
})();
function pieceTypeCode(type) { function pieceTypeCode(type) {
if (type === PS.KING) { if (type === PS.KING) {
return 'k'; return 'k';
@ -451,8 +476,7 @@ $(function (){
$('#cb_light_name').val(''); $('#cb_light_name').val('');
$('#cb_dark_name').val(''); $('#cb_dark_name').val('');
(function(){ cancelGameCallback = gun.get(PacoSakoUUID).get('games').get(newId).onWithCancel(function(d) {
let callback = function(d) {
if (d && d.board) { if (d && d.board) {
try { try {
const moves = JSON.parse(d.board); const moves = JSON.parse(d.board);
@ -486,31 +510,16 @@ $(function (){
debug('Error replaying board state', err); debug('Error replaying board state', err);
} }
} }
};
cancelGameCallback = function() { callback = function() {}; };
gun.get(PacoSakoUUID).get('games').get(newId).on(function(d){
callback(d);
}); });
})();
(function(){ cancelMetaCallback = gun.get(PacoSakoUUID).get('meta').get(newId).onWithCancel(function(d) {
let callback = function(d) {
d = d || {}; d = d || {};
debug('got meta', d); debug('got meta', d);
$('#cb_board').data('lightName', shortenName(String(d.lightName || 'Light'))); $('#cb_board').data('lightName', shortenName(String(d.lightName || 'Light')));
$('#cb_board').data('darkName', shortenName(String(d.darkName || 'Dark'))); $('#cb_board').data('darkName', shortenName(String(d.darkName || 'Dark')));
$('#cb_light_name').val(String(d.lightName || '')); $('#cb_light_name').val(String(d.lightName || ''));
$('#cb_dark_name').val(String(d.darkName || '')); $('#cb_dark_name').val(String(d.darkName || ''));
};
cancelMetaCallback = function() { callback = function() {}; };
gun.get(PacoSakoUUID).get('meta').get(newId).on(function(d){
callback(d);
}); });
})();
let selOpt = $('#cb_game_' + newId); let selOpt = $('#cb_game_' + newId);
if (selOpt.length === 1) { if (selOpt.length === 1) {