marko 4.24.2 → 4.24.5

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.
@@ -104,8 +104,16 @@ class Normalizer {
104
104
  try {
105
105
  if (elNode.rawTagNameExpression) {
106
106
  tagName = builder.parseExpression(elNode.rawTagNameExpression);
107
- } else if (context.ignoreUnrecognizedTags && !elNode.parentNode.tagDef && !elNode.parentNode.rawTagNameExpression) {
108
- tagName = tagName.replace(/^@/, "at_"); // escapes @tags inside unrecognized tags
107
+ } else if (context.ignoreUnrecognizedTags && tagName[0] === "@") {
108
+ let owner = elNode.parentNode;
109
+
110
+ while (owner && /^(?:for|while|if|else(?:-if))$/.test(owner.tagName)) {
111
+ owner = owner.parentNode;
112
+ }
113
+
114
+ if (!owner || !(owner.rawTagNameExpression || owner.tagDef)) {
115
+ tagName = "at_" + tagName.slice(1); // escapes @tags inside unrecognized tags
116
+ }
109
117
  }
110
118
  } catch (e) {
111
119
  const type = elNode.rawTagNameExpression === "()" ? "Missing" : "Invalid";
@@ -74,16 +74,6 @@ function addDelegatedEventHandlerToDoc(eventType, doc) {
74
74
  var listeners = doc[listenersAttachedKey] = doc[listenersAttachedKey] || {};
75
75
  if (!listeners[eventType]) {
76
76
  body.addEventListener(eventType, listeners[eventType] = function (event) {
77
- var propagationStopped = false;
78
-
79
- // Monkey-patch to fix #97
80
- var oldStopPropagation = event.stopPropagation;
81
-
82
- event.stopPropagation = function () {
83
- oldStopPropagation.call(event);
84
- propagationStopped = true;
85
- };
86
-
87
77
  var curNode = event.target;
88
78
  if (!curNode) {
89
79
  return;
@@ -106,15 +96,29 @@ function addDelegatedEventHandlerToDoc(eventType, doc) {
106
96
  // Attributes will have the following form:
107
97
  // on<event_type>("<target_method>|<component_id>")
108
98
 
109
- do {
110
- if (target = getEventFromEl(curNode, propName)) {
111
- delegateEvent(curNode, propName, target, event);
99
+ if (event.bubbles) {
100
+ var propagationStopped = false;
101
+
102
+ // Monkey-patch to fix #97
103
+ var oldStopPropagation = event.stopPropagation;
112
104
 
113
- if (propagationStopped) {
114
- break;
105
+ event.stopPropagation = function () {
106
+ oldStopPropagation.call(event);
107
+ propagationStopped = true;
108
+ };
109
+
110
+ do {
111
+ if (target = getEventFromEl(curNode, propName)) {
112
+ delegateEvent(curNode, propName, target, event);
113
+
114
+ if (propagationStopped) {
115
+ break;
116
+ }
115
117
  }
116
- }
117
- } while ((curNode = curNode.parentNode) && curNode.getAttribute);
118
+ } while ((curNode = curNode.parentNode) && curNode.getAttribute);
119
+ } else if (target = getEventFromEl(curNode, propName)) {
120
+ delegateEvent(curNode, propName, target, event);
121
+ }
118
122
  }, true);
119
123
  }
120
124
  }
@@ -211,7 +211,7 @@ var proto = AsyncStream.prototype = {
211
211
  timeout = AsyncStream.DEFAULT_TIMEOUT;
212
212
  }
213
213
 
214
- newStream._stack = AsyncStream.INCLUDE_STACK ? getNonMarkoStack(new Error()) : null;
214
+ newStream._stack = AsyncStream.INCLUDE_STACK ? new Error() : null;
215
215
  newStream.name = name;
216
216
 
217
217
  if (timeout > 0) {
@@ -437,6 +437,7 @@ var proto = AsyncStream.prototype = {
437
437
  error: function (e) {
438
438
  var name = this.name;
439
439
  var stack = this._stack;
440
+ if (stack) stack = getNonMarkoStack(stack);
440
441
 
441
442
  if (!(e instanceof Error)) {
442
443
  e = new Error(JSON.stringify(e));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "marko",
3
- "version": "4.24.2",
3
+ "version": "4.24.5",
4
4
  "license": "MIT",
5
5
  "description": "UI Components + streaming, async, high performance, HTML templating for Node.js and the browser.",
6
6
  "dependencies": {
@@ -122,12 +122,16 @@ class Normalizer {
122
122
  try {
123
123
  if (elNode.rawTagNameExpression) {
124
124
  tagName = builder.parseExpression(elNode.rawTagNameExpression);
125
- } else if (
126
- context.ignoreUnrecognizedTags &&
127
- !elNode.parentNode.tagDef &&
128
- !elNode.parentNode.rawTagNameExpression
129
- ) {
130
- tagName = tagName.replace(/^@/, "at_"); // escapes @tags inside unrecognized tags
125
+ } else if (context.ignoreUnrecognizedTags && tagName[0] === "@") {
126
+ let owner = elNode.parentNode;
127
+
128
+ while (owner && /^(?:for|while|if|else(?:-if))$/.test(owner.tagName)) {
129
+ owner = owner.parentNode;
130
+ }
131
+
132
+ if (!owner || !(owner.rawTagNameExpression || owner.tagDef)) {
133
+ tagName = "at_" + tagName.slice(1); // escapes @tags inside unrecognized tags
134
+ }
131
135
  }
132
136
  } catch (e) {
133
137
  const type = elNode.rawTagNameExpression === "()" ? "Missing" : "Invalid";
@@ -79,16 +79,6 @@ function addDelegatedEventHandlerToDoc(eventType, doc) {
79
79
  body.addEventListener(
80
80
  eventType,
81
81
  (listeners[eventType] = function(event) {
82
- var propagationStopped = false;
83
-
84
- // Monkey-patch to fix #97
85
- var oldStopPropagation = event.stopPropagation;
86
-
87
- event.stopPropagation = function() {
88
- oldStopPropagation.call(event);
89
- propagationStopped = true;
90
- };
91
-
92
82
  var curNode = event.target;
93
83
  if (!curNode) {
94
84
  return;
@@ -111,15 +101,29 @@ function addDelegatedEventHandlerToDoc(eventType, doc) {
111
101
  // Attributes will have the following form:
112
102
  // on<event_type>("<target_method>|<component_id>")
113
103
 
114
- do {
115
- if ((target = getEventFromEl(curNode, propName))) {
116
- delegateEvent(curNode, propName, target, event);
104
+ if (event.bubbles) {
105
+ var propagationStopped = false;
106
+
107
+ // Monkey-patch to fix #97
108
+ var oldStopPropagation = event.stopPropagation;
117
109
 
118
- if (propagationStopped) {
119
- break;
110
+ event.stopPropagation = function() {
111
+ oldStopPropagation.call(event);
112
+ propagationStopped = true;
113
+ };
114
+
115
+ do {
116
+ if ((target = getEventFromEl(curNode, propName))) {
117
+ delegateEvent(curNode, propName, target, event);
118
+
119
+ if (propagationStopped) {
120
+ break;
121
+ }
120
122
  }
121
- }
122
- } while ((curNode = curNode.parentNode) && curNode.getAttribute);
123
+ } while ((curNode = curNode.parentNode) && curNode.getAttribute);
124
+ } else if ((target = getEventFromEl(curNode, propName))) {
125
+ delegateEvent(curNode, propName, target, event);
126
+ }
123
127
  }),
124
128
  true
125
129
  );
@@ -215,9 +215,7 @@ var proto = (AsyncStream.prototype = {
215
215
  timeout = AsyncStream.DEFAULT_TIMEOUT;
216
216
  }
217
217
 
218
- newStream._stack = AsyncStream.INCLUDE_STACK
219
- ? getNonMarkoStack(new Error())
220
- : null;
218
+ newStream._stack = AsyncStream.INCLUDE_STACK ? new Error() : null;
221
219
  newStream.name = name;
222
220
 
223
221
  if (timeout > 0) {
@@ -451,6 +449,7 @@ var proto = (AsyncStream.prototype = {
451
449
  error: function(e) {
452
450
  var name = this.name;
453
451
  var stack = this._stack;
452
+ if (stack) stack = getNonMarkoStack(stack);
454
453
 
455
454
  if (!(e instanceof Error)) {
456
455
  e = new Error(JSON.stringify(e));