all files / src/ Events.js

74.07% Statements 20/27
70% Branches 7/10
100% Functions 4/4
74.07% Lines 20/27
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60                                                                               
'use strict';
 
var log = require('./Log.js').Logger('libZotero:Events');
 
var trigger = function(eventType, data={}, filter=false){
	Iif(filter){
		log.debug('filter is not false', 3);
		eventType += '_' + filter;
	}
	log.debug('Triggering eventful ' + eventType, 3);
	
	data.zeventful = true;
	// if(data.triggeringElement === null || data.triggeringElement === undefined){
	// 	data.triggeringElement = J('#eventful');
	// }
	
	try{
		if(Zotero.eventmanager.callbacks.hasOwnProperty(eventType)){
			var callbacks = Zotero.eventmanager.callbacks[eventType];
			callbacks.forEach(function(callback){
				var cdata = Z.extend({}, data, callback.data);
				var e = {
					data: cdata
				};
				callback.f(e);
			});
		}
	}
	catch(e){
		log.error(`failed triggering:${eventType}`);
		log.error(e);
	}
};
 
var listen = function(events, handler, data, filter){
	log.debug('Zotero.listen: ' + events, 3);
	//append filter to event strings if it's specified
	var eventsArray = events.split(' ');
	Iif(eventsArray.length > 0 && filter){
		for(var i = 0; i < eventsArray.length; i++){
			eventsArray[i] += '_' + filter;
		}
	}
	eventsArray.forEach(function(ev){
		Iif(Zotero.eventmanager.callbacks.hasOwnProperty(ev)){
			Zotero.eventmanager.callbacks[ev].push({
				data: data,
				f: handler
			});
		} else {
			Zotero.eventmanager.callbacks[ev] = [{
				data: data,
				f: handler
			}];
		}
	});
};
 
module.exports = {trigger, listen};