UNPKG

vue-poster-editor

Version:

A poster editor based on Vue.js

110 lines (86 loc) 2.57 kB
'use strict'; 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'];