vsn 0.1.34 → 0.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,6 +14,7 @@ export declare type EventDispatcherCallback = (...args: any[]) => any;
14
14
  export declare class EventDispatcher {
15
15
  private static sources;
16
16
  private readonly _listeners;
17
+ private readonly _allListeners;
17
18
  private readonly _relays;
18
19
  private _lastKey;
19
20
  constructor();
@@ -25,5 +26,8 @@ export declare class EventDispatcher {
25
26
  off(event: string, key?: number): boolean;
26
27
  offWithContext(event: string, context: any): number;
27
28
  getListener(event: string, key: number): EventCallback | undefined;
29
+ all(fct: EventDispatcherCallback, context?: any, once?: boolean): number;
30
+ none(key: number): boolean;
31
+ noneWithContext(context: any): number;
28
32
  dispatch(event: string, ...args: any[]): void;
29
33
  }
@@ -31,6 +31,7 @@ var EventCallback = /** @class */ (function () {
31
31
  exports.EventCallback = EventCallback;
32
32
  var EventDispatcher = /** @class */ (function () {
33
33
  function EventDispatcher() {
34
+ this._allListeners = [];
34
35
  this._relays = [];
35
36
  this._lastKey = 0;
36
37
  this._listeners = {};
@@ -102,6 +103,37 @@ var EventDispatcher = /** @class */ (function () {
102
103
  return cb;
103
104
  }
104
105
  };
106
+ EventDispatcher.prototype.all = function (fct, context, once) {
107
+ once = once || false;
108
+ this._lastKey++;
109
+ this._allListeners.push(new EventCallback(fct, this._lastKey, once, context));
110
+ return this._lastKey;
111
+ };
112
+ EventDispatcher.prototype.none = function (key) {
113
+ for (var _i = 0, _a = this._allListeners; _i < _a.length; _i++) {
114
+ var cb = _a[_i];
115
+ if (key == cb.key) {
116
+ this._allListeners.splice(this._allListeners.indexOf(cb), 1);
117
+ return true;
118
+ }
119
+ }
120
+ return false;
121
+ };
122
+ EventDispatcher.prototype.noneWithContext = function (context) {
123
+ var toRemove = [], cnt = 0;
124
+ for (var _i = 0, _a = this._allListeners; _i < _a.length; _i++) {
125
+ var cb = _a[_i];
126
+ if (context == cb.context) {
127
+ toRemove.push(cb);
128
+ }
129
+ }
130
+ for (var _b = 0, toRemove_2 = toRemove; _b < toRemove_2.length; _b++) {
131
+ var cb = toRemove_2[_b];
132
+ this._allListeners.splice(this._allListeners.indexOf(cb), 1);
133
+ cnt++;
134
+ }
135
+ return cnt;
136
+ };
105
137
  EventDispatcher.prototype.dispatch = function (event) {
106
138
  var args = [];
107
139
  for (var _i = 1; _i < arguments.length; _i++) {
@@ -120,8 +152,15 @@ var EventDispatcher = /** @class */ (function () {
120
152
  cb.call(args);
121
153
  }
122
154
  }
123
- for (var _a = 0, _b = this._relays; _a < _b.length; _a++) {
124
- var relay = _b[_a];
155
+ for (var _a = 0, _b = this._allListeners; _a < _b.length; _a++) {
156
+ var cb = _b[_a];
157
+ if (cb.once) {
158
+ this.none(cb.key);
159
+ }
160
+ cb.call(args);
161
+ }
162
+ for (var _c = 0, _d = this._relays; _c < _d.length; _c++) {
163
+ var relay = _d[_c];
125
164
  relay.dispatch.apply(relay, __spreadArray([event], args));
126
165
  }
127
166
  };
@@ -1 +1 @@
1
- {"version":3,"file":"EventDispatcher.js","sourceRoot":"","sources":["../src/EventDispatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EventDispatcher.js","sourceRoot":"","sources":["../src/EventDispatcher.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,10 @@ import { IPropertyConfig, Property } from "./Property";
2
2
  import { WrappedArray } from "../WrappedArray";
3
3
  export declare class ArrayProperty<T = any> extends Property<WrappedArray<T>> {
4
4
  _value: WrappedArray<T>;
5
+ allKey: number;
5
6
  constructor(value?: any, config?: IPropertyConfig);
7
+ deconstruct(): void;
8
+ relayEvent(event: any, ...args: any[]): void;
6
9
  set value(v: any);
7
10
  get value(): any;
8
11
  }
@@ -14,6 +14,11 @@ var __extends = (this && this.__extends) || (function () {
14
14
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
15
  };
16
16
  })();
17
+ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
18
+ for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
19
+ to[j] = from[i];
20
+ return to;
21
+ };
17
22
  Object.defineProperty(exports, "__esModule", { value: true });
18
23
  exports.ArrayProperty = void 0;
19
24
  var Property_1 = require("./Property");
@@ -22,10 +27,23 @@ var ArrayProperty = /** @class */ (function (_super) {
22
27
  __extends(ArrayProperty, _super);
23
28
  function ArrayProperty(value, config) {
24
29
  var _this = _super.call(this, new WrappedArray_1.WrappedArray(), config) || this;
25
- _this._value.dispatcher.addRelay(_this);
26
- _this.value = value;
30
+ _this.allKey = _this._value.dispatcher.all(_this.relayEvent, _this);
31
+ if (value !== undefined) {
32
+ _this.value = value;
33
+ }
27
34
  return _this;
28
35
  }
36
+ ArrayProperty.prototype.deconstruct = function () {
37
+ this._value.dispatcher.none(this.allKey);
38
+ _super.prototype.deconstruct.call(this);
39
+ };
40
+ ArrayProperty.prototype.relayEvent = function (event) {
41
+ var args = [];
42
+ for (var _i = 1; _i < arguments.length; _i++) {
43
+ args[_i - 1] = arguments[_i];
44
+ }
45
+ this.dispatch.apply(this, __spreadArray(['change'], args));
46
+ };
29
47
  Object.defineProperty(ArrayProperty.prototype, "value", {
30
48
  get: function () {
31
49
  return this._value;
@@ -1 +1 @@
1
- {"version":3,"file":"ArrayProperty.js","sourceRoot":"","sources":["../../../src/Scope/properties/ArrayProperty.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,uCAAqD;AACrD,gDAA6C;AAE7C;IAA4C,iCAAyB;IAGjE,uBAAY,KAAW,EAAE,MAAwB;QAAjD,YACI,kBAAM,IAAI,2BAAY,EAAO,EAAE,MAAM,CAAC,SAGzC;QAFG,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAI,CAAC,CAAC;QACtC,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;IACvB,CAAC;IAED,sBAAI,gCAAK;aAcT;YACI,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;aAhBD,UAAU,CAAM;YACZ,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC;gBACrB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAEZ,IAAI,IAAI,CAAC,MAAM,YAAY,2BAAY,EAAE;gBACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;oBAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9B;iBAAM,IAAI,CAAC,YAAY,2BAAY,EAAE;gBAClC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACnB;QACL,CAAC;;;OAAA;IAKL,oBAAC;AAAD,CAAC,AA1BD,CAA4C,mBAAQ,GA0BnD;AA1BY,sCAAa"}
1
+ {"version":3,"file":"ArrayProperty.js","sourceRoot":"","sources":["../../../src/Scope/properties/ArrayProperty.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAqD;AACrD,gDAA6C;AAE7C;IAA4C,iCAAyB;IAIjE,uBAAY,KAAW,EAAE,MAAwB;QAAjD,YACI,kBAAM,IAAI,2BAAY,EAAO,EAAE,MAAM,CAAC,SAKzC;QAJG,KAAI,CAAC,MAAM,GAAG,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,KAAI,CAAC,UAAU,EAAE,KAAI,CAAC,CAAC;QAChE,IAAI,KAAK,KAAK,SAAS,EAAE;YACrB,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACtB;;IACL,CAAC;IAED,mCAAW,GAAX;QACI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,iBAAM,WAAW,WAAE,CAAC;IACxB,CAAC;IAED,kCAAU,GAAV,UAAW,KAAK;QAAE,cAAO;aAAP,UAAO,EAAP,qBAAO,EAAP,IAAO;YAAP,6BAAO;;QACrB,IAAI,CAAC,QAAQ,OAAb,IAAI,iBAAU,QAAQ,GAAK,IAAI,GAAE;IACrC,CAAC;IAED,sBAAI,gCAAK;aAcT;YACI,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;aAhBD,UAAU,CAAM;YACZ,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC;gBACrB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAEZ,IAAI,IAAI,CAAC,MAAM,YAAY,2BAAY,EAAE;gBACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;oBAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9B;iBAAM,IAAI,CAAC,YAAY,2BAAY,EAAE;gBAClC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACnB;QACL,CAAC;;;OAAA;IAKL,oBAAC;AAAD,CAAC,AAtCD,CAA4C,mBAAQ,GAsCnD;AAtCY,sCAAa"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vsn",
3
- "version": "0.1.34",
3
+ "version": "0.1.35",
4
4
  "description": "SEO Friendly Javascript/Typescript Framework",
5
5
  "keywords": [
6
6
  "framework",
@@ -31,6 +31,7 @@ export type EventDispatcherCallback = (...args: any[]) => any;
31
31
  export class EventDispatcher {
32
32
  private static sources: EventDispatcher[] = [];
33
33
  private readonly _listeners: EventCallbackList;
34
+ private readonly _allListeners: EventCallback[] = [];
34
35
  private readonly _relays: EventDispatcher[] = [];
35
36
  private _lastKey: number;
36
37
 
@@ -110,6 +111,40 @@ export class EventDispatcher {
110
111
  }
111
112
  }
112
113
 
114
+ all(fct: EventDispatcherCallback, context?: any, once?: boolean): number {
115
+ once = once || false;
116
+ this._lastKey++;
117
+ this._allListeners.push(new EventCallback(fct, this._lastKey, once, context));
118
+ return this._lastKey;
119
+ }
120
+
121
+ none(key: number): boolean {
122
+ for(const cb of this._allListeners) {
123
+ if(key == cb.key) {
124
+ this._allListeners.splice(this._allListeners.indexOf(cb), 1);
125
+ return true;
126
+ }
127
+ }
128
+ return false;
129
+ }
130
+
131
+ noneWithContext(context: any): number {
132
+ let toRemove: EventCallback[] = [],
133
+ cnt = 0;
134
+
135
+ for(const cb of this._allListeners) {
136
+ if(context == cb.context) {
137
+ toRemove.push(cb);
138
+ }
139
+ }
140
+
141
+ for(const cb of toRemove) {
142
+ this._allListeners.splice(this._allListeners.indexOf(cb), 1);
143
+ cnt++;
144
+ }
145
+ return cnt;
146
+ }
147
+
113
148
  dispatch(event: string, ...args: any[]): void {
114
149
  if(event in this._listeners) {
115
150
  for (let i = 0; i < this._listeners[event].length; i++) {
@@ -127,6 +162,13 @@ export class EventDispatcher {
127
162
  }
128
163
  }
129
164
 
165
+ for (const cb of this._allListeners) {
166
+ if (cb.once) {
167
+ this.none(cb.key);
168
+ }
169
+ cb.call(args);
170
+ }
171
+
130
172
  for (const relay of this._relays) {
131
173
  relay.dispatch(event, ...args);
132
174
  }
@@ -3,11 +3,23 @@ import {WrappedArray} from "../WrappedArray";
3
3
 
4
4
  export class ArrayProperty<T = any> extends Property<WrappedArray<T>> {
5
5
  _value: WrappedArray<T>;
6
+ allKey: number;
6
7
 
7
8
  constructor(value?: any, config?: IPropertyConfig) {
8
9
  super(new WrappedArray<any>(), config);
9
- this._value.dispatcher.addRelay(this);
10
- this.value = value;
10
+ this.allKey = this._value.dispatcher.all(this.relayEvent, this);
11
+ if (value !== undefined) {
12
+ this.value = value;
13
+ }
14
+ }
15
+
16
+ deconstruct() {
17
+ this._value.dispatcher.none(this.allKey);
18
+ super.deconstruct();
19
+ }
20
+
21
+ relayEvent(event, ...args) {
22
+ this.dispatch('change', ...args);
11
23
  }
12
24
 
13
25
  set value(v: any) {
@@ -0,0 +1,191 @@
1
+ import { EventDispatcher } from "../src/EventDispatcher";
2
+
3
+
4
+ describe('EventDispatcher', () => {
5
+ let dispatcher: EventDispatcher,
6
+ dummy: any = null,
7
+ dummy2: any = null;
8
+
9
+ beforeEach(() => {
10
+ dispatcher = new EventDispatcher();
11
+ dummy = jasmine.createSpyObj('dummy', ['callback']);
12
+ dummy2 = jasmine.createSpyObj('dummy2', ['callback']);
13
+ });
14
+
15
+ it("should bind and be called properly", () => {
16
+ dispatcher.on('event', dummy.callback.bind(dummy));
17
+ expect(dummy.callback).not.toHaveBeenCalled();
18
+ dispatcher.dispatch('event', 1, 2, 'three');
19
+ expect(dummy.callback).toHaveBeenCalled();
20
+ });
21
+
22
+ it("should unbind and not be called", () => {
23
+ const key: number = dispatcher.on('event', dummy.callback.bind(dummy));
24
+ expect(dispatcher.off('event', key)).toEqual(true);
25
+ dispatcher.dispatch('event', 1, 2, 'three');
26
+ expect(dummy.callback).not.toHaveBeenCalled();
27
+ });
28
+
29
+ it("should not unbind events that don't exist", () => {
30
+ const key: number = dispatcher.on('event', dummy.callback.bind(dummy));
31
+ expect(dispatcher.off('fake_event', -1)).toEqual(false);
32
+ dispatcher.dispatch('event', 1, 2, 'three');
33
+ expect(dummy.callback).toHaveBeenCalled();
34
+ });
35
+
36
+ it("should bind and be called properly", () => {
37
+ dispatcher.on('event', dummy.callback.bind(dummy));
38
+ expect(dummy.callback).not.toHaveBeenCalled();
39
+ dispatcher.dispatch('event', 1, 2, 'three');
40
+ expect(dummy.callback).toHaveBeenCalled();
41
+ });
42
+
43
+ it("should unbind all", () => {
44
+ dispatcher.on('event', dummy.callback, dummy);
45
+ dispatcher.on('event', dummy.callback, dummy);
46
+ dispatcher.on('event', dummy2.callback, dummy2);
47
+ expect(dispatcher.off('event')).toEqual(true);
48
+ expect(dispatcher.offWithContext('event', dummy)).toBe(0);
49
+ expect(dispatcher.offWithContext('event', dummy2)).toBe(0);
50
+ dispatcher.dispatch('event');
51
+ expect(dummy.callback).not.toHaveBeenCalled();
52
+ });
53
+
54
+ it("should unbind all with matching context", () => {
55
+ dispatcher.on('event', dummy.callback, dummy);
56
+ dispatcher.on('event', dummy.callback, dummy);
57
+ dispatcher.on('event', dummy2.callback, dummy2);
58
+ expect(dispatcher.offWithContext('event', dummy)).toBe(2);
59
+ dispatcher.dispatch('event');
60
+ expect(dummy.callback).not.toHaveBeenCalled();
61
+ });
62
+
63
+ it("should unbind the correct listeners by key", () => {
64
+ let key1 = dispatcher.on('event', dummy.callback, dummy),
65
+ key2 = dispatcher.on('event', dummy.callback, dummy),
66
+ key3 = dispatcher.on('event', dummy.callback, dummy),
67
+ key4 = dispatcher.on('event', dummy.callback, dummy),
68
+ key5 = dispatcher.on('event', dummy.callback, dummy);
69
+
70
+ expect(dispatcher.off('event', key2)).toBe(true);
71
+ expect(dispatcher.off('event', key4)).toBe(true);
72
+ expect(dispatcher.off('event', key1)).toBe(true);
73
+ expect(dispatcher.off('event', key3)).toBe(true);
74
+ expect(dispatcher.off('event', key5)).toBe(true);
75
+ });
76
+
77
+ it("should fail to unbind the once listeners", () => {
78
+ let key1: number = dispatcher.once('event', dummy.callback, dummy),
79
+ cb1: any = dispatcher.getListener('event', key1),
80
+ key2: number = dispatcher.once('event', dummy.callback, dummy),
81
+ cb2: any = dispatcher.getListener('event', key2),
82
+ key3: number = dispatcher.once('event', dummy.callback, dummy),
83
+ cb3: any = dispatcher.getListener('event', key3),
84
+ key4: number = dispatcher.on('event', dummy.callback, dummy),
85
+ cb4: any = dispatcher.getListener('event', key4),
86
+ key5: number = dispatcher.once('event', dummy.callback, dummy),
87
+ cb5: any = dispatcher.getListener('event', key5);
88
+
89
+ dispatcher.dispatch('event');
90
+ dispatcher.dispatch('event');
91
+ dispatcher.dispatch('event');
92
+ dispatcher.dispatch('event');
93
+ expect(dispatcher.off('event', key2)).toBe(false);
94
+ expect(cb2.calls).toBe(1);
95
+ expect(dispatcher.off('event', key4)).toBe(true);
96
+ expect(cb4.calls).toBe(4);
97
+ expect(dispatcher.off('event', key1)).toBe(false);
98
+ expect(cb1.calls).toBe(1);
99
+ expect(dispatcher.off('event', key3)).toBe(false);
100
+ expect(cb3.calls).toBe(1);
101
+ expect(dispatcher.off('event', key5)).toBe(false);
102
+ expect(cb5.calls).toBe(1);
103
+ expect(dispatcher.off('event', key4)).toBe(false);
104
+ });
105
+
106
+ it("should only be called once", () => {
107
+ let onceCalls = 0,
108
+ normalCalls = 0;
109
+ dispatcher.once('event', () => {
110
+ // empty
111
+ });
112
+ dispatcher.once('event', () => {
113
+ onceCalls += 1;
114
+ });
115
+ dispatcher.once('event', () => {
116
+ // empty
117
+ });
118
+ dispatcher.on('event', () => {
119
+ normalCalls += 1;
120
+ });
121
+ dispatcher.dispatch('event');
122
+ dispatcher.dispatch('event');
123
+ dispatcher.dispatch('event');
124
+ dispatcher.dispatch('event');
125
+ expect(onceCalls).toBe(1);
126
+ expect(normalCalls).toBe(4);
127
+ });
128
+
129
+ it("should only be called once with nested event triggers", () => {
130
+ let onceCalls = 0,
131
+ normalCalls = 0;
132
+ const key: number = dispatcher.once('event', () => {
133
+ dispatcher.dispatch('event');
134
+ }),
135
+ cb: any = dispatcher.getListener('event', key);
136
+ dispatcher.dispatch('event');
137
+ expect(cb.calls).toBe(1);
138
+ });
139
+
140
+ it("should pass arguments", () => {
141
+ const key = dispatcher.once('event', (num, arr, obj) => {
142
+ expect(num).toBe(1);
143
+ expect(arr[0]).toBe(1);
144
+ expect(arr[1]).toBe(2);
145
+ expect(arr[2]).toBe(3);
146
+ expect(obj.foo).toBe('bar');
147
+ }),
148
+ cb = dispatcher.getListener('event', key);
149
+ dispatcher.dispatch('event', 1, [1,2,3], {foo:'bar'});
150
+ });
151
+
152
+ it("cannot call a once event more than once", () => {
153
+ const key: number = dispatcher.once('event', () => {}),
154
+ cb: any = dispatcher.getListener('event', key);
155
+ dispatcher.dispatch('event');
156
+ expect(cb.call()).toBe(false);
157
+ expect(cb.calls).toBe(1);
158
+ });
159
+
160
+ it("should not unbind anything and return 0", () => {
161
+ expect(dispatcher.offWithContext('event', null)).toBe(0);
162
+ });
163
+
164
+ it("should not trigger events that don't exist", () => {
165
+ expect(dispatcher.dispatch('event')).toBe(undefined);
166
+ });
167
+
168
+ it("should trigger events in the correct order", () => {
169
+ let check: number = 1;
170
+ dispatcher.on('event', () => {
171
+ expect(check).toBe(1);
172
+ check++;
173
+ });
174
+ dispatcher.on('event', () => {
175
+ expect(check).toBe(2);
176
+ check++;
177
+ });
178
+ dispatcher.on('event', () => {
179
+ expect(check).toBe(3);
180
+ check++;
181
+ });
182
+ dispatcher.on('event', () => {
183
+ expect(check).toBe(4);
184
+ check++;
185
+ });
186
+ dispatcher.on('event', () => {
187
+ expect(check).toBe(5);
188
+ });
189
+ dispatcher.dispatch('event');
190
+ });
191
+ });