UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

74 lines (62 loc) 1.75 kB
import createDefaultSetter from './createDefaultSetter'; import EventManager from './EventManager'; import TaskRunner from './TaskRunner'; function keep(fn, findEl, e) { var _this = this; if (e && e.target) { var currentTarget = e.currentTarget; e.persist(); var delayer = new TaskRunner(); var keeper = new TaskRunner(); var event = new EventManager(currentTarget); var stopFn = function stopFn() { if (delayer.isRunning) { delayer.cancel(); } if (keeper.isRunning) { keeper.cancel(); fn.call(_this, e); } event.clear(); }; var delayFn = function delayFn() { keeper.run(40, function () { if (findEl() !== currentTarget) { stopFn(); } else { fn.call(_this, e, true); } }); }; delayer.delay(500, delayFn); event.addEventListener('mouseleave', stopFn); event.addEventListener('mouseup', stopFn); } fn.call(this, e); } export default function keepRunning(findEl) { return function (target, key, descriptor) { var constructor = target.constructor; var fn = descriptor.value; return { configurable: true, get: function get() { if (this === target) { return fn; } if (this.constructor !== constructor && Object.getPrototypeOf(this).constructor === constructor) { return fn; } var boundFn = keep.bind(this, fn, findEl.bind(this)); Object.defineProperty(this, key, { value: boundFn, configurable: true, writable: true }); return boundFn; }, set: createDefaultSetter(key) }; }; } //# sourceMappingURL=keepRunning.js.map