vsn 0.1.132 → 0.1.134

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.
Files changed (50) hide show
  1. package/demo/examples/cascading-function-sheets.html +2 -11
  2. package/demo/memory-leak-test.html +23 -0
  3. package/demo/resources/xhr-memory-leak-test.html +587 -0
  4. package/demo/vsn.js +2 -2
  5. package/dist/AST/ClassNode.js +23 -36
  6. package/dist/AST/ClassNode.js.map +1 -1
  7. package/dist/AST.js +1 -1
  8. package/dist/AST.js.map +1 -1
  9. package/dist/Attribute.d.ts +1 -0
  10. package/dist/Attribute.js +5 -0
  11. package/dist/Attribute.js.map +1 -1
  12. package/dist/DOM/AbstractDOM.d.ts +2 -1
  13. package/dist/DOM/AbstractDOM.js +6 -0
  14. package/dist/DOM/AbstractDOM.js.map +1 -1
  15. package/dist/DOM/DOMObject.d.ts +3 -0
  16. package/dist/DOM/DOMObject.js +8 -0
  17. package/dist/DOM/DOMObject.js.map +1 -1
  18. package/dist/EventDispatcher.d.ts +1 -0
  19. package/dist/EventDispatcher.js +81 -31
  20. package/dist/EventDispatcher.js.map +1 -1
  21. package/dist/Scope/ScopeDataAbstract.d.ts +1 -0
  22. package/dist/Scope/ScopeDataAbstract.js +45 -26
  23. package/dist/Scope/ScopeDataAbstract.js.map +1 -1
  24. package/dist/Scope/properties/Property.d.ts +1 -0
  25. package/dist/Scope/properties/Property.js +6 -0
  26. package/dist/Scope/properties/Property.js.map +1 -1
  27. package/dist/Scope.d.ts +1 -1
  28. package/dist/Scope.js +10 -4
  29. package/dist/Scope.js.map +1 -1
  30. package/dist/Tag.d.ts +1 -0
  31. package/dist/Tag.js +32 -35
  32. package/dist/Tag.js.map +1 -1
  33. package/dist/version.d.ts +1 -1
  34. package/dist/version.js +1 -1
  35. package/package.json +1 -1
  36. package/src/AST/ClassNode.ts +7 -9
  37. package/src/AST.ts +1 -1
  38. package/src/Attribute.ts +6 -0
  39. package/src/DOM/AbstractDOM.ts +8 -1
  40. package/src/DOM/DOMObject.ts +10 -0
  41. package/src/EventDispatcher.ts +23 -1
  42. package/src/Scope/ScopeDataAbstract.ts +9 -0
  43. package/src/Scope/properties/Property.ts +7 -0
  44. package/src/Scope.ts +11 -5
  45. package/src/Tag.ts +20 -10
  46. package/src/version.ts +1 -1
  47. package/dist/demo.min.js +0 -3
  48. package/dist/demo.min.js.LICENSE.txt +0 -9
  49. package/dist/vsn.min.js +0 -3
  50. package/dist/vsn.min.js.LICENSE.txt +0 -9
package/src/Tag.ts CHANGED
@@ -79,6 +79,7 @@ export class Tag extends DOMObject {
79
79
  this.rawAttributes = {};
80
80
  this.parsedAttributes = {};
81
81
  this.onEventHandlers = {};
82
+ this.onEventBindings = {};
82
83
  this.analyzeElementAttributes();
83
84
  this._state = TagState.Instantiated;
84
85
  }
@@ -257,10 +258,13 @@ export class Tag extends DOMObject {
257
258
 
258
259
  public addChild(tag: Tag) {
259
260
  this._children.push(tag);
261
+ tag.once('deconstruct', this.removeChild, this);
260
262
  }
261
263
 
262
264
  public removeChild(tag: Tag) {
263
- this._children.splice(this._children.indexOf(tag), 1);
265
+ const index = this._children.indexOf(tag);
266
+ if (index > -1)
267
+ this._children.splice(index, 1);
264
268
  }
265
269
 
266
270
  public get children(): Tag[] {
@@ -700,7 +704,8 @@ export class Tag extends DOMObject {
700
704
  if (eventType.indexOf('touch') > -1 || passiveValue !== null)
701
705
  eventListenerOpts['passive'] = passiveValue === null && true || passiveValue;
702
706
 
703
- element.addEventListener(eventType, this.handleEvent.bind(this, eventType), eventListenerOpts);
707
+
708
+ element.addEventListener(eventType, this.getEventBinding(eventType), eventListenerOpts);
704
709
  }
705
710
 
706
711
  this.onEventHandlers[eventType].push({
@@ -712,6 +717,13 @@ export class Tag extends DOMObject {
712
717
  });
713
718
  }
714
719
 
720
+ public getEventBinding(eventType: string) {
721
+ if (this.onEventBindings[eventType] === undefined)
722
+ this.onEventBindings[eventType] = this.handleEvent.bind(this, eventType);
723
+
724
+ return this.onEventBindings[eventType];
725
+ }
726
+
715
727
  public removeEventHandler(eventType: string, handler, context: any = null) {
716
728
  if (!this.onEventHandlers[eventType])
717
729
  return;
@@ -720,17 +732,16 @@ export class Tag extends DOMObject {
720
732
  if (_handler) {
721
733
  this.onEventHandlers[eventType].splice(this.onEventHandlers[eventType].indexOf(_handler), 1);
722
734
  if (this.onEventHandlers[eventType].length === 0) {
723
- this.element.removeEventListener(eventType, this.handleEvent.bind(this, eventType));
735
+ this.element.removeEventListener(eventType, this.getEventBinding(eventType));
724
736
  }
725
737
  }
726
738
  }
727
739
 
728
740
  public removeAllEventHandlers() {
729
741
  for (const eventType of Object.keys(this.onEventHandlers)) {
730
- for (const handler of this.onEventHandlers[eventType]) {
731
- this.removeEventHandler(eventType, handler.handler, handler.context);
732
- }
742
+ this.element.removeEventListener(eventType, this.getEventBinding(eventType));
733
743
  }
744
+ this.onEventHandlers = {};
734
745
  }
735
746
 
736
747
  public removeContextEventHandlers(context: any) {
@@ -801,16 +812,15 @@ export class Tag extends DOMObject {
801
812
  this.removeAllEventHandlers();
802
813
  this.attributes.forEach(attr => attr.deconstruct());
803
814
  this.attributes.clear();
815
+ this.deferredAttributes.length = 0;
804
816
  this._children.forEach(child => child.deconstruct());
805
817
  this._children.length = 0;
806
818
  if (this._controller) {
807
819
  this._controller.deconstruct();
808
820
  this._controller = null;
809
821
  }
810
- if (this.element) {
811
- this.element[Tag.TaggedVariable] = null;
812
- (this as any).element = null;
813
- }
822
+ this._parentTag = null;
823
+ (this as any).dom = null;
814
824
  super.deconstruct();
815
825
  }
816
826
  }
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = '0.1.132';
1
+ export const VERSION = '0.1.134';
2
2