| Index: lib/filterClasses.js |
| =================================================================== |
| --- a/lib/filterClasses.js |
| +++ b/lib/filterClasses.js |
| @@ -55,23 +55,16 @@ |
| * Abstract base class for filters |
| * |
| * @param {string} text string representation of the filter |
| * @constructor |
| */ |
| function Filter(text) |
| { |
| this.text = text; |
| - |
| - /** |
| - * Subscriptions to which this filter belongs. |
| - * @type {(Subscription|Set.<Subscription>)?} |
| - * @private |
| - */ |
| - this._subscriptions = null; |
| } |
| exports.Filter = Filter; |
| Filter.prototype = |
| { |
| /** |
| * String representation of the filter |
| * @type {string} |
| @@ -83,46 +76,73 @@ |
| * @type {string} |
| */ |
| get type() |
| { |
| throw new Error("Please define filter type in the subclass"); |
| }, |
| /** |
| + * Subscriptions to which this filter belongs. |
| + * @type {?(Subscription|Set.<Subscription>)} |
| + * @private |
| + */ |
| + _subscriptions: null, |
| + |
| + /** |
| + * Whether the filter's subscriptions have already been added to the filter. |
| + * @type {boolean} |
| + * @package |
| + */ |
| + get subscriptionsAdded() |
| + { |
| + return this.hasOwnProperty("_subscriptions"); |
| + }, |
| + set subscriptionsAdded(value) |
| + { |
| + // Once set to true, this cannot be set back to false even if all |
| + // subscriptions are removed. |
| + if (value) |
| + this._subscriptions = this._subscriptions; |
| + }, |
| + |
| + /** |
| * Yields subscriptions to which the filter belongs. |
| * @yields {Subscription} |
| + * @package |
| */ |
| *subscriptions() |
| { |
| if (this._subscriptions) |
| { |
| if (this._subscriptions instanceof Set) |
| yield* this._subscriptions; |
| else |
| yield this._subscriptions; |
| } |
| }, |
| /** |
| * The number of subscriptions to which the filter belongs. |
| * @type {number} |
| + * @package |
|
Manish Jethani
2018/11/18 00:50:57
All subscription-related methods on the filter obj
|
| */ |
| get subscriptionCount() |
| { |
| if (this._subscriptions instanceof Set) |
| return this._subscriptions.size; |
| return this._subscriptions ? 1 : 0; |
| }, |
| /** |
| * Adds a subscription to the set of subscriptions to which the filter |
| * belongs. |
| * @param {Subscription} subscription |
| + * @package |
| */ |
| addSubscription(subscription) |
| { |
| // Since we use truthy checks in our logic, we must avoid adding a |
| // subscription that isn't a non-null object. |
| if (subscription === null || typeof subscription != "object") |
| return; |
| @@ -138,16 +158,17 @@ |
| this._subscriptions = subscription; |
| } |
| }, |
| /** |
| * Removes a subscription from the set of subscriptions to which the filter |
| * belongs. |
| * @param {Subscription} subscription |
| + * @package |
| */ |
| removeSubscription(subscription) |
| { |
| if (this._subscriptions) |
| { |
| if (this._subscriptions instanceof Set) |
| { |
| this._subscriptions.delete(subscription); |