| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | 
							- // a map of notification service, like email, web, IM, qq, etc.
 
- // serviceName -> callback(user, title, description, params)
 
- // expected arguments to callback:
 
- // - user: Meteor user object
 
- // - title: String, TAPi18n key
 
- // - description, String, TAPi18n key
 
- // - params: Object, values extracted from context, to used for above two TAPi18n keys
 
- //   see example call to Notifications.notify() in models/activities.js
 
- const notifyServices = {};
 
- Notifications = {
 
-   subscribe: (serviceName, callback) => {
 
-     notifyServices[serviceName] = callback;
 
-   },
 
-   unsubscribe: (serviceName) => {
 
-     if (typeof notifyServices[serviceName] === 'function')
 
-       delete notifyServices[serviceName];
 
-   },
 
-   // filter recipients according to user settings for notification
 
-   getUsers: (participants, watchers) => {
 
-     const userMap = {};
 
-     participants.forEach((userId) => {
 
-       if (userMap[userId]) return;
 
-       const user = Users.findOne(userId);
 
-       if (user && user.hasTag('notify-participate')) {
 
-         userMap[userId] = user;
 
-       }
 
-     });
 
-     watchers.forEach((userId) => {
 
-       if (userMap[userId]) return;
 
-       const user = Users.findOne(userId);
 
-       if (user && user.hasTag('notify-watch')) {
 
-         userMap[userId] = user;
 
-       }
 
-     });
 
-     return _.map(userMap, (v) => v);
 
-   },
 
-   notify: (user, title, description, params) => {
 
-     for(const k in notifyServices) {
 
-       const notifyImpl = notifyServices[k];
 
-       if (notifyImpl && typeof notifyImpl === 'function') notifyImpl(user, title, description, params);
 
-     }
 
-   },
 
- };
 
 
  |