UNPKG

ngx-bootstrap

Version:
87 lines 3.52 kB
import { Trigger } from './trigger.class'; var DEFAULT_ALIASES = { hover: ['mouseover', 'mouseout'], focus: ['focusin', 'focusout'] }; export function parseTriggers(triggers, aliases) { if (aliases === void 0) { aliases = DEFAULT_ALIASES; } var trimmedTriggers = (triggers || '').trim(); if (trimmedTriggers.length === 0) { return []; } var parsedTriggers = trimmedTriggers.split(/\s+/) .map(function (trigger) { return trigger.split(':'); }) .map(function (triggerPair) { var alias = aliases[triggerPair[0]] || triggerPair; return new Trigger(alias[0], alias[1]); }); var manualTriggers = parsedTriggers .filter(function (triggerPair) { return triggerPair.isManual(); }); if (manualTriggers.length > 1) { throw 'Triggers parse error: only one manual trigger is allowed'; } if (manualTriggers.length === 1 && parsedTriggers.length > 1) { throw 'Triggers parse error: manual trigger can\'t be mixed with other triggers'; } return parsedTriggers; } export function listenToTriggers(renderer, target, triggers, showFn, hideFn, toggleFn) { var parsedTriggers = parseTriggers(triggers); var listeners = []; if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) { return Function.prototype; } parsedTriggers.forEach(function (trigger) { if (trigger.open === trigger.close) { listeners.push(renderer.listen(target, trigger.open, toggleFn)); return; } listeners.push(renderer.listen(target, trigger.open, showFn), renderer.listen(target, trigger.close, hideFn)); }); return function () { listeners.forEach(function (unsubscribeFn) { return unsubscribeFn(); }); }; } export function listenToTriggersV2(renderer, options) { var parsedTriggers = parseTriggers(options.triggers); var target = options.target; // do nothing if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) { return Function.prototype; } // all listeners var listeners = []; // lazy listeners registration var _registerHide = []; var registerHide = function () { // add hide listeners to unregister array _registerHide.forEach(function (fn) { return listeners.push(fn()); }); // register hide events only once _registerHide.length = 0; }; // register open\close\toggle listeners parsedTriggers.forEach(function (trigger) { var useToggle = trigger.open === trigger.close; var showFn = useToggle ? options.toggle : options.show; if (!useToggle) { _registerHide.push(function () { return renderer.listen(target, trigger.close, options.hide); }); } listeners.push(renderer.listen(target, trigger.open, function () { return showFn(registerHide); })); }); return function () { listeners.forEach(function (unsubscribeFn) { return unsubscribeFn(); }); }; } export function registerOutsideClick(renderer, options) { if (!options.outsideClick) { return Function.prototype; } return renderer.listenGlobal('document', 'click', function (event) { if (options.target && options.target.contains(event.target)) { return; } if (options.targets && options.targets.some(function (target) { return target.contains(event.target); })) { return; } options.hide(); }); } //# sourceMappingURL=triggers.js.map