vue-poster-editor
Version:
A poster editor based on Vue.js
110 lines (86 loc) • 2.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _forEachRight2 = require('lodash/forEachRight');
var _forEachRight3 = _interopRequireDefault(_forEachRight2);
var _noop2 = require('lodash/noop');
var _noop3 = _interopRequireDefault(_noop2);
var _assign2 = require('lodash/assign');
var _assign3 = _interopRequireDefault(_assign2);
var _jquery = require('jquery');
var _jquery2 = _interopRequireDefault(_jquery);
var _dom = require('./dom');
var _dom2 = _interopRequireDefault(_dom);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var doc = (0, _jquery2.default)(document);
var queue = [];
var outClick = {
queue: queue,
add: function add(options) {
options = (0, _assign3.default)({
callback: _noop3.default,
delay: true,
element: null
}, options);
if (!options.element) {
throw new Error('No options.element');
}
var removed = false;
if (options.delay) {
setTimeout(function () {
if (!removed) {
queue.push(options);
}
}, +options.delay || 16);
} else {
queue.push(options);
}
outClick.initEvent();
return function () {
outClick.remove(options);
removed = true;
};
},
remove: function remove(options) {
var inx = queue.lastIndexOf(options);
if (inx > -1) {
queue.splice(inx, 1);
}
if (!queue.length) {
outClick.resetEvent();
}
},
checkTask: function checkTask(task, e) {
var element = task.element;
if (_dom2.default.contains(element, e.target)) {
return;
}
task.callback(e);
},
check: function check(e) {
(0, _forEachRight3.default)(queue, function (task) {
outClick.checkTask(task, e);
});
},
initEvent: function initEvent() {
if (outClick.bound) {
return;
}
outClick.bound = true;
doc.on('click.editor-out-click', outClick.check);
},
resetEvent: function resetEvent() {
if (outClick.bound) {
doc.off('click.editor-out-click');
outClick.bound = false;
}
}
};
exports.default = {
outClick: outClick,
addOutClick: function addOutClick(options) {
return outClick.add(options);
}
};
module.exports = exports['default'];