UNPKG

bitbox-compiler

Version:

bitbox /unbox

179 lines (149 loc) 16.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; exports.default = event; function isFunction(v) { return typeof v === 'function' || false; } function event(el) { el = el || {}; var callbacks = {}, _id = 0; el.events = {}; el.getEvents = function () { return Object.keys(callbacks); }; el.update = function (payload, value) { var diff = {}; if (value && typeof payload === 'string') { var key = payload; payload = {}; payload[key] = value; } if (payload && (typeof payload === 'undefined' ? 'undefined' : _typeof(payload)) === 'object') { Object.keys(payload).map(function (k) { if (el[k] !== payload[k]) { diff[k] = { old: el[k], new: payload[k] }; el[k] = payload[k]; } }); } el.emit('update', payload, diff); }; el.sub = function (events, fn) { if (isFunction(fn)) { fn._id = typeof fn._id == 'undefined' ? _id++ : fn._id; events.replace(/\S+/g, function (name, pos) { (callbacks[name] = callbacks[name] || []).push(fn); fn.typed = pos > 0; }); } return el; }; el.on = function () { var events = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; var fn = arguments[1]; if (isFunction(fn)) { fn._id = typeof fn._id == 'undefined' ? _id++ : fn._id; if (!Array.isArray(events)) events = [events]; events.map(function (name) { if (name !== 'listener' && name !== 'update') { el.events[name] = true; el.emit('listener', name); } (callbacks[name] = callbacks[name] || []).push(fn); //fn.typed = pos > 0 }); } return el; }; el.off = function (events, fn) { if (events == '*') { callbacks = {}; } else { if (!Array.isArray(events)) events = [events]; events.map(function (name) { if (fn) { var arr = callbacks[name]; for (var i = 0, cb; cb = arr && arr[i]; ++i) { if (cb._id == fn._id) { arr.splice(i, 1); i--; } } } else { callbacks[name] = []; } }); } return el; }; el.one = function (name, fn) { function on() { el.off(name, on); fn.apply(el, arguments); } return el.on(name, on); }; el.pub = function (name) { var args = [].slice.call(arguments, 1), fns = callbacks[name] || []; for (var i = 0, fn; fn = fns[i]; ++i) { if (!fn.busy) { fn.busy = 1; fn.apply(el, fn.typed ? [name].concat(args) : args); if (fns[i] !== fn) { i--; } fn.busy = 0; } } if (callbacks.all && name != '*') { el.trigger.apply(el, ['*', name].concat(args)); } return el; }; el.emit = function (name) { var args = [].slice.call(arguments, 1), fns = callbacks[name] || []; for (var i = 0, fn; fn = fns[i]; ++i) { if (!fn.busy) { fn.busy = 1; fn.apply(el, fn.typed ? [name].concat(args) : args); if (fns[i] !== fn) { i--; } fn.busy = 0; } } if (callbacks.all && name != '*') { el.trigger.apply(el, ['*', name].concat(args)); } return el; }; el.trigger = function (name) { var args = [].slice.call(arguments, 1), fns = callbacks[name] || []; for (var i = 0, fn; fn = fns[i]; ++i) { if (!fn.busy) { fn.busy = 1; fn.apply(el, fn.typed ? [name].concat(args) : args); if (fns[i] !== fn) { i--; } fn.busy = 0; } } if (callbacks.all && name != '*') { el.trigger.apply(el, ['*', name].concat(args)); } return el; }; return el; } //# sourceMappingURL=data:application/json;base64,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Y3Rpb24gaXNGdW5jdGlvbih2KSB7IHJldHVybiB0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZSB9XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV2ZW50KGVsKSB7XG5cblx0ZWwgPSBlbCB8fCB7fVxuXG5cdHZhciBjYWxsYmFja3MgPSB7fSxcblx0XHRfaWQgPSAwO1xuXG4gICAgZWwuZXZlbnRzID0ge31cbiAgICBlbC5nZXRFdmVudHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGNhbGxiYWNrcylcbiAgICB9XG5cbiAgICBlbC51cGRhdGUgPSBmdW5jdGlvbihwYXlsb2FkLCB2YWx1ZSkge1xuXHRcdGxldCBkaWZmID0ge31cblx0XHRpZiAodmFsdWUgJiYgdHlwZW9mIHBheWxvYWQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRsZXQga2V5ID0gcGF5bG9hZDtcblx0XHRcdHBheWxvYWQgPSB7fTtcblx0XHRcdHBheWxvYWRba2V5XSA9IHZhbHVlO1xuXHRcdH1cblx0XHRpZiAocGF5bG9hZCAmJiB0eXBlb2YgcGF5bG9hZCA9PT0gJ29iamVjdCcpIHtcblx0XHRcdE9iamVjdC5rZXlzKHBheWxvYWQpLm1hcChrID0+IHtcblx0XHRcdFx0aWYgKGVsW2tdICE9PSBwYXlsb2FkW2tdKSB7XG5cdFx0XHRcdFx0ZGlmZltrXSA9IHtcblx0XHRcdFx0XHRcdG9sZDogZWxba10sXG5cdFx0XHRcdFx0XHRuZXc6IHBheWxvYWRba11cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxba10gPSBwYXlsb2FkW2tdXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRlbC5lbWl0KCd1cGRhdGUnLCBwYXlsb2FkLCBkaWZmKVxuXHR9XG5cbiAgICBlbC5zdWIgPSBmdW5jdGlvbihldmVudHMsIGZuKSB7XG5cdFx0aWYgKGlzRnVuY3Rpb24oZm4pKSB7XG5cdFx0XHRmbi5faWQgPSB0eXBlb2YgZm4uX2lkID09ICd1bmRlZmluZWQnID8gX2lkKysgOiBmbi5faWRcblx0XHRcdGV2ZW50cy5yZXBsYWNlKC9cXFMrL2csIGZ1bmN0aW9uKG5hbWUsIHBvcykge1xuXHRcdFx0XHQoY2FsbGJhY2tzW25hbWVdID0gY2FsbGJhY2tzW25hbWVdIHx8IFtdKS5wdXNoKGZuKVxuXHRcdFx0XHRmbi50eXBlZCA9IHBvcyA+IDBcblx0XHRcdH0pXG5cdFx0fVxuXHRcdHJldHVybiBlbFxuXHR9XG5cblx0ZWwub24gPSBmdW5jdGlvbihldmVudHMgPSBbXSwgZm4pIHtcblx0XHRpZiAoaXNGdW5jdGlvbihmbikpIHtcblx0XHRcdGZuLl9pZCA9IHR5cGVvZiBmbi5faWQgPT0gJ3VuZGVmaW5lZCcgPyBfaWQrKyA6IGZuLl9pZFxuXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXZlbnRzKSkgZXZlbnRzID0gW2V2ZW50c11cbiAgICAgICAgICAgIGV2ZW50cy5tYXAoZnVuY3Rpb24obmFtZSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgIT09ICdsaXN0ZW5lcicgJiYgbmFtZSAhPT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuZXZlbnRzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZWwuZW1pdCgnbGlzdGVuZXInLCBuYW1lKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIChjYWxsYmFja3NbbmFtZV0gPSBjYWxsYmFja3NbbmFtZV0gfHwgW10pLnB1c2goZm4pXG5cdFx0XHRcdC8vZm4udHlwZWQgPSBwb3MgPiAwXG5cdFx0XHR9KVxuXHRcdH1cblx0XHRyZXR1cm4gZWxcblx0fVxuXG5cdGVsLm9mZiA9IGZ1bmN0aW9uKGV2ZW50cywgZm4pIHtcblx0XHRpZiAoZXZlbnRzID09ICcqJykge1xuICAgICAgICAgICAgY2FsbGJhY2tzID0ge31cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShldmVudHMpKSBldmVudHMgPSBbZXZlbnRzXVxuXHRcdFx0ZXZlbnRzLm1hcChmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHRcdGlmIChmbikge1xuXHRcdFx0XHRcdHZhciBhcnIgPSBjYWxsYmFja3NbbmFtZV1cblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMCwgY2I7XG5cdFx0XHRcdFx0XHQoY2IgPSBhcnIgJiYgYXJyW2ldKTsgKytpKSB7XG5cdFx0XHRcdFx0XHRpZiAoY2IuX2lkID09IGZuLl9pZCkge1xuXHRcdFx0XHRcdFx0XHRhcnIuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRcdFx0XHRpLS1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2tzW25hbWVdID0gW11cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHR9XG5cdFx0cmV0dXJuIGVsXG5cdH1cblxuXHRlbC5vbmUgPSBmdW5jdGlvbihuYW1lLCBmbikge1xuXHRcdGZ1bmN0aW9uIG9uKCkge1xuXHRcdFx0ZWwub2ZmKG5hbWUsIG9uKVxuXHRcdFx0Zm4uYXBwbHkoZWwsIGFyZ3VtZW50cylcblx0XHR9XG5cdFx0cmV0dXJuIGVsLm9uKG5hbWUsIG9uKVxuXHR9XG5cblxuICAgIGVsLnB1YiA9IGZ1bmN0aW9uKG5hbWUpIHtcblxuXHRcdHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuXHRcdFx0Zm5zID0gY2FsbGJhY2tzW25hbWVdIHx8IFtdXG5cblx0XHRmb3IgKHZhciBpID0gMCwgZm47XG5cdFx0XHQoZm4gPSBmbnNbaV0pOyArK2kpIHtcblx0XHRcdGlmICghZm4uYnVzeSkge1xuXHRcdFx0XHRmbi5idXN5ID0gMVxuXHRcdFx0XHRmbi5hcHBseShlbCwgZm4udHlwZWQgPyBbbmFtZV0uY29uY2F0KGFyZ3MpIDogYXJncylcblx0XHRcdFx0aWYgKGZuc1tpXSAhPT0gZm4pIHtcblx0XHRcdFx0XHRpLS1cblx0XHRcdFx0fVxuXHRcdFx0XHRmbi5idXN5ID0gMFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChjYWxsYmFja3MuYWxsICYmIG5hbWUgIT0gJyonKSB7XG5cdFx0XHRlbC50cmlnZ2VyLmFwcGx5KGVsLCBbJyonLCBuYW1lXS5jb25jYXQoYXJncykpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsXG5cdH1cblxuXG4gICAgZWwuZW1pdCA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHR2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcblx0XHRcdGZucyA9IGNhbGxiYWNrc1tuYW1lXSB8fCBbXVxuXG5cdFx0Zm9yICh2YXIgaSA9IDAsIGZuO1xuXHRcdFx0KGZuID0gZm5zW2ldKTsgKytpKSB7XG5cdFx0XHRpZiAoIWZuLmJ1c3kpIHtcblx0XHRcdFx0Zm4uYnVzeSA9IDFcblx0XHRcdFx0Zm4uYXBwbHkoZWwsIGZuLnR5cGVkID8gW25hbWVdLmNvbmNhdChhcmdzKSA6IGFyZ3MpXG5cdFx0XHRcdGlmIChmbnNbaV0gIT09IGZuKSB7XG5cdFx0XHRcdFx0aS0tXG5cdFx0XHRcdH1cblx0XHRcdFx0Zm4uYnVzeSA9IDBcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY2FsbGJhY2tzLmFsbCAmJiBuYW1lICE9ICcqJykge1xuXHRcdFx0ZWwudHJpZ2dlci5hcHBseShlbCwgWycqJywgbmFtZV0uY29uY2F0KGFyZ3MpKVxuXHRcdH1cblxuXHRcdHJldHVybiBlbFxuXHR9XG5cblx0ZWwudHJpZ2dlciA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHR2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcblx0XHRcdGZucyA9IGNhbGxiYWNrc1tuYW1lXSB8fCBbXVxuXG5cdFx0Zm9yICh2YXIgaSA9IDAsIGZuO1xuXHRcdFx0KGZuID0gZm5zW2ldKTsgKytpKSB7XG5cdFx0XHRpZiAoIWZuLmJ1c3kpIHtcblx0XHRcdFx0Zm4uYnVzeSA9IDFcblx0XHRcdFx0Zm4uYXBwbHkoZWwsIGZuLnR5cGVkID8gW25hbWVdLmNvbmNhdChhcmdzKSA6IGFyZ3MpXG5cdFx0XHRcdGlmIChmbnNbaV0gIT09IGZuKSB7XG5cdFx0XHRcdFx0aS0tXG5cdFx0XHRcdH1cblx0XHRcdFx0Zm4uYnVzeSA9IDBcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY2FsbGJhY2tzLmFsbCAmJiBuYW1lICE9ICcqJykge1xuXHRcdFx0ZWwudHJpZ2dlci5hcHBseShlbCwgWycqJywgbmFtZV0uY29uY2F0KGFyZ3MpKVxuXHRcdH1cblxuXHRcdHJldHVybiBlbFxuXHR9XG5cblx0cmV0dXJuIGVsXG5cbn1cbiJdfQ==