choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
74 lines (62 loc) • 1.75 kB
JavaScript
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