bugcore
Version:
bugcore is a JavaScript library that provides a foundational architecture for object oriented JS
137 lines (104 loc) • 4.4 kB
JavaScript
/*
* Copyright (c) 2016 airbug Inc. http://airbug.com
*
* bugcore may be freely distributed under the MIT license.
*/
//-------------------------------------------------------------------------------
// Annotations
//-------------------------------------------------------------------------------
//@Export('EventQueryBuilder')
//@Require('Class')
//@Require('EventQuery')
//@Require('EventQueryListener')
//@Require('Obj')
//@Require('QueryBuilder')
//-------------------------------------------------------------------------------
// Context
//-------------------------------------------------------------------------------
require('bugpack').context("*", function(bugpack) {
//-------------------------------------------------------------------------------
// BugPack
//-------------------------------------------------------------------------------
var Class = bugpack.require('Class');
var EventQuery = bugpack.require('EventQuery');
var EventQueryListener = bugpack.require('EventQueryListener');
var Obj = bugpack.require('Obj');
var QueryBuilder = bugpack.require('QueryBuilder');
//-------------------------------------------------------------------------------
// Declare Class
//-------------------------------------------------------------------------------
/**
* @class
* @extends {QueryBuilder}
*/
var EventQueryBuilder = Class.extend(QueryBuilder, {
_name: "EventQueryBuilder",
//-------------------------------------------------------------------------------
// Constructor
//-------------------------------------------------------------------------------
/**
* @constructs
* @param {EventReceiver} eventReceiver
* @param {(string | Array.<string>)} eventTypes
*/
_constructor: function(eventReceiver, eventTypes) {
this._super();
//-------------------------------------------------------------------------------
// Private Properties
//-------------------------------------------------------------------------------
/**
* @private
* @type {EventReceiver}
*/
this.eventReceiver = eventReceiver;
/**
* @private
* @type {(string | Array.<string>)}
*/
this.eventTypes = eventTypes;
},
//-------------------------------------------------------------------------------
// Getters and Setters
//-------------------------------------------------------------------------------
/**
* @return {EventReceiver}
*/
getEventReceiver: function() {
return this.eventReceiver;
},
/**
* @return {string|Array.<string>}
*/
getEventTypes: function() {
return this.eventTypes;
},
//-------------------------------------------------------------------------------
// Public Methods
//-------------------------------------------------------------------------------
/**
* @param {function(Event)} listenerFunction
* @param {?Object=} listenerContext (optional)
* @param {?boolean=} once (optional)
*/
call: function(listenerFunction, listenerContext, once) {
var eventQuery = this.build();
var eventQueryListener = new EventQueryListener(listenerFunction, listenerContext, once, eventQuery);
this.eventReceiver.attachEventListenerToTypes(this.eventTypes, eventQueryListener);
},
/**
* @return {EventQuery}
*/
build: function() {
var eventQuery = new EventQuery();
this.getConditionBuilderSet().forEach(function(conditionBuilder) {
var condition = conditionBuilder.buildCondition();
eventQuery.addCondition(condition);
});
return eventQuery;
}
});
//-------------------------------------------------------------------------------
// Exports
//-------------------------------------------------------------------------------
bugpack.export('EventQueryBuilder', EventQueryBuilder);
});