UNPKG

1.81 kBJavaScriptView Raw
1import { Trigger } from './trigger.class';
2var DEFAULT_ALIASES = {
3 hover: ['mouseenter', 'mouseleave'],
4 focus: ['focusin', 'focusout']
5};
6export function parseTriggers(triggers, aliases) {
7 if (aliases === void 0) { aliases = DEFAULT_ALIASES; }
8 var trimmedTriggers = (triggers || '').trim();
9 if (trimmedTriggers.length === 0) {
10 return [];
11 }
12 var parsedTriggers = trimmedTriggers.split(/\s+/)
13 .map(function (trigger) { return trigger.split(':'); })
14 .map(function (triggerPair) {
15 var alias = aliases[triggerPair[0]] || triggerPair;
16 return new Trigger(alias[0], alias[1]);
17 });
18 var manualTriggers = parsedTriggers
19 .filter(function (triggerPair) { return triggerPair.isManual(); });
20 if (manualTriggers.length > 1) {
21 throw 'Triggers parse error: only one manual trigger is allowed';
22 }
23 if (manualTriggers.length === 1 && parsedTriggers.length > 1) {
24 throw 'Triggers parse error: manual trigger can\'t be mixed with other triggers';
25 }
26 return parsedTriggers;
27}
28export function listenToTriggers(renderer, target, triggers, showFn, hideFn, toggleFn) {
29 var parsedTriggers = parseTriggers(triggers);
30 var listeners = [];
31 if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {
32 return Function.prototype;
33 }
34 parsedTriggers.forEach(function (trigger) {
35 if (trigger.open === trigger.close) {
36 listeners.push(renderer.listen(target, trigger.open, toggleFn));
37 return;
38 }
39 listeners.push(renderer.listen(target, trigger.open, showFn), renderer.listen(target, trigger.close, hideFn));
40 });
41 return function () { listeners.forEach(function (unsubscribeFn) { return unsubscribeFn(); }); };
42}
43//# sourceMappingURL=triggers.js.map
\No newline at end of file