choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
85 lines (68 loc) • 2.07 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = keepRunning;
var _createDefaultSetter = _interopRequireDefault(require("./createDefaultSetter"));
var _EventManager = _interopRequireDefault(require("./EventManager"));
var _TaskRunner = _interopRequireDefault(require("./TaskRunner"));
function keep(fn, findEl, e) {
var _this = this;
if (e && e.target) {
var currentTarget = e.currentTarget;
e.persist();
var delayer = new _TaskRunner["default"]();
var keeper = new _TaskRunner["default"]();
var event = new _EventManager["default"](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);
}
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: (0, _createDefaultSetter["default"])(key)
};
};
}
//# sourceMappingURL=keepRunning.js.map