UNPKG

ng2-bootstrap

Version:
43 lines 1.81 kB
import { Trigger } from './trigger.class'; var DEFAULT_ALIASES = { hover: ['mouseenter', 'mouseleave'], 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(); }); }; } //# sourceMappingURL=triggers.js.map