marko 4.24.2 → 4.24.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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));