Hello ${data.name}!
@@ -202,7 +202,7 @@ __src/components/app-hello/template.marko__
```xml
Hello ${data.name}!
@@ -258,17 +258,17 @@ module.exports = require('marko-widgets').defineComponent({
+ onBeforeHide("handleOverlayBeforeHide")>
Body content for overlay.
+ onClick("handleShowButtonClick")>
Show Overlay
+ onClick("handleHideButtonClick")>
Hide Overlay
diff --git a/docs/widgets/taglib-api.md b/docs/widgets/taglib-api.md
index 47620f56c..5daad84e4 100644
--- a/docs/widgets/taglib-api.md
+++ b/docs/widgets/taglib-api.md
@@ -85,7 +85,7 @@ NOTE: For DOM events that bubble, efficient DOM event delegation will automatica
```xml
- My Button
+ My Button
```
@@ -113,7 +113,7 @@ var myButton = this.getEl('myButton');
```xml
```
diff --git a/test/autotests/taglib-lookup/forEachAttribute/expected.json b/test/autotests/taglib-lookup/forEachAttribute/expected.json
index 73645491e..8a3ded573 100644
--- a/test/autotests/taglib-lookup/forEachAttribute/expected.json
+++ b/test/autotests/taglib-lookup/forEachAttribute/expected.json
@@ -28,5 +28,6 @@
"no-update-if",
"no-update-body-if",
"w-preserve-attrs",
+ "on*",
"w-on*"
]
diff --git a/test/autotests/widgets-browser/update-manager-batch-updates/template.marko b/test/autotests/widgets-browser/update-manager-batch-updates/template.marko
index 767822fa1..8a02311be 100644
--- a/test/autotests/widgets-browser/update-manager-batch-updates/template.marko
+++ b/test/autotests/widgets-browser/update-manager-batch-updates/template.marko
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/update-manager-next-tick/template.marko b/test/autotests/widgets-browser/update-manager-next-tick/template.marko
index 767822fa1..8a02311be 100644
--- a/test/autotests/widgets-browser/update-manager-next-tick/template.marko
+++ b/test/autotests/widgets-browser/update-manager-next-tick/template.marko
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-custom-events-declarative/template.marko b/test/autotests/widgets-browser/widget-custom-events-declarative/template.marko
index 77e0de7a7..4addcbd71 100644
--- a/test/autotests/widgets-browser/widget-custom-events-declarative/template.marko
+++ b/test/autotests/widgets-browser/widget-custom-events-declarative/template.marko
@@ -5,8 +5,8 @@
-
-
+
+
${color}
diff --git a/test/autotests/widgets-browser/widget-custom-events/template.marko b/test/autotests/widgets-browser/widget-custom-events/template.marko
index 77e0de7a7..4addcbd71 100644
--- a/test/autotests/widgets-browser/widget-custom-events/template.marko
+++ b/test/autotests/widgets-browser/widget-custom-events/template.marko
@@ -5,8 +5,8 @@
-
-
+
+
${color}
diff --git a/test/autotests/widgets-browser/widget-destroy-legacy/template.marko b/test/autotests/widgets-browser/widget-destroy-legacy/template.marko
index 77e0de7a7..4addcbd71 100644
--- a/test/autotests/widgets-browser/widget-destroy-legacy/template.marko
+++ b/test/autotests/widgets-browser/widget-destroy-legacy/template.marko
@@ -5,8 +5,8 @@
-
-
+
+
${color}
diff --git a/test/autotests/widgets-browser/widget-destroy-ref/components/app-legacy-button/template.marko b/test/autotests/widgets-browser/widget-destroy-ref/components/app-legacy-button/template.marko
index 296cfcc80..999872c31 100644
--- a/test/autotests/widgets-browser/widget-destroy-ref/components/app-legacy-button/template.marko
+++ b/test/autotests/widgets-browser/widget-destroy-ref/components/app-legacy-button/template.marko
@@ -1,5 +1,5 @@
+ onMousedown("handleRootMouseDown")>
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-destroy-unsubscribe-dom-events/template.marko b/test/autotests/widgets-browser/widget-destroy-unsubscribe-dom-events/template.marko
index 095e99b30..cb6240b1d 100644
--- a/test/autotests/widgets-browser/widget-destroy-unsubscribe-dom-events/template.marko
+++ b/test/autotests/widgets-browser/widget-destroy-unsubscribe-dom-events/template.marko
@@ -1,6 +1,6 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-dom-event-listeners-repeated-non-bubbling/template.marko b/test/autotests/widgets-browser/widget-dom-event-listeners-repeated-non-bubbling/template.marko
index 1d8e180ab..5ea5da941 100644
--- a/test/autotests/widgets-browser/widget-dom-event-listeners-repeated-non-bubbling/template.marko
+++ b/test/autotests/widgets-browser/widget-dom-event-listeners-repeated-non-bubbling/template.marko
@@ -1,6 +1,6 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-dom-events/components/app-legacy-button/template.marko b/test/autotests/widgets-browser/widget-dom-events/components/app-legacy-button/template.marko
index 296cfcc80..999872c31 100644
--- a/test/autotests/widgets-browser/widget-dom-events/components/app-legacy-button/template.marko
+++ b/test/autotests/widgets-browser/widget-dom-events/components/app-legacy-button/template.marko
@@ -1,5 +1,5 @@
+ onMousedown("handleRootMouseDown")>
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-dom-events/template.marko b/test/autotests/widgets-browser/widget-dom-events/template.marko
index e90c8dfee..3b860381d 100644
--- a/test/autotests/widgets-browser/widget-dom-events/template.marko
+++ b/test/autotests/widgets-browser/widget-dom-events/template.marko
@@ -1,20 +1,20 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-event-handler-method-conditional-bubbles/template.marko b/test/autotests/widgets-browser/widget-event-handler-method-conditional-bubbles/template.marko
index f500f4f2e..3ec63ad17 100644
--- a/test/autotests/widgets-browser/widget-event-handler-method-conditional-bubbles/template.marko
+++ b/test/autotests/widgets-browser/widget-event-handler-method-conditional-bubbles/template.marko
@@ -1,5 +1,5 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-event-handler-method-conditional-direct/template.marko b/test/autotests/widgets-browser/widget-event-handler-method-conditional-direct/template.marko
index 1f5a0d2ed..b04f7a8b8 100644
--- a/test/autotests/widgets-browser/widget-event-handler-method-conditional-direct/template.marko
+++ b/test/autotests/widgets-browser/widget-event-handler-method-conditional-direct/template.marko
@@ -1,5 +1,5 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-event-handler-method-dynamic/template.marko b/test/autotests/widgets-browser/widget-event-handler-method-dynamic/template.marko
index e19493637..79f35ed87 100644
--- a/test/autotests/widgets-browser/widget-event-handler-method-dynamic/template.marko
+++ b/test/autotests/widgets-browser/widget-event-handler-method-dynamic/template.marko
@@ -1,7 +1,7 @@
app-macro-events
-
+
$label
diff --git a/test/autotests/widgets-browser/widget-extend/components/app-extend-button/template.marko b/test/autotests/widgets-browser/widget-extend/components/app-extend-button/template.marko
index 311acef20..a62b11c2a 100644
--- a/test/autotests/widgets-browser/widget-extend/components/app-extend-button/template.marko
+++ b/test/autotests/widgets-browser/widget-extend/components/app-extend-button/template.marko
@@ -1,5 +1,5 @@
diff --git a/test/autotests/widgets-browser/widget-rerender-reuse-stateful/components/app-stateful-button/template.marko b/test/autotests/widgets-browser/widget-rerender-reuse-stateful/components/app-stateful-button/template.marko
index 767822fa1..8a02311be 100644
--- a/test/autotests/widgets-browser/widget-rerender-reuse-stateful/components/app-stateful-button/template.marko
+++ b/test/autotests/widgets-browser/widget-rerender-reuse-stateful/components/app-stateful-button/template.marko
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-split-into-multiple-templates/components/app-stateful-button/template.marko b/test/autotests/widgets-browser/widget-split-into-multiple-templates/components/app-stateful-button/template.marko
index 767822fa1..8a02311be 100644
--- a/test/autotests/widgets-browser/widget-split-into-multiple-templates/components/app-stateful-button/template.marko
+++ b/test/autotests/widgets-browser/widget-split-into-multiple-templates/components/app-stateful-button/template.marko
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-stateful-copy-state-on-write/template.marko b/test/autotests/widgets-browser/widget-stateful-copy-state-on-write/template.marko
index 95b323246..e6232c2aa 100644
--- a/test/autotests/widgets-browser/widget-stateful-copy-state-on-write/template.marko
+++ b/test/autotests/widgets-browser/widget-stateful-copy-state-on-write/template.marko
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-stateful-no-copy-state-on-write-if-same-value/template.marko b/test/autotests/widgets-browser/widget-stateful-no-copy-state-on-write-if-same-value/template.marko
index 767822fa1..8a02311be 100644
--- a/test/autotests/widgets-browser/widget-stateful-no-copy-state-on-write-if-same-value/template.marko
+++ b/test/autotests/widgets-browser/widget-stateful-no-copy-state-on-write-if-same-value/template.marko
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-stateful-no-rerender-if-destroyed/template.marko b/test/autotests/widgets-browser/widget-stateful-no-rerender-if-destroyed/template.marko
index 767822fa1..8a02311be 100644
--- a/test/autotests/widgets-browser/widget-stateful-no-rerender-if-destroyed/template.marko
+++ b/test/autotests/widgets-browser/widget-stateful-no-rerender-if-destroyed/template.marko
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-stateful-preserve-body/components/app-stateful-button/template.marko b/test/autotests/widgets-browser/widget-stateful-preserve-body/components/app-stateful-button/template.marko
index 767822fa1..8a02311be 100644
--- a/test/autotests/widgets-browser/widget-stateful-preserve-body/components/app-stateful-button/template.marko
+++ b/test/autotests/widgets-browser/widget-stateful-preserve-body/components/app-stateful-button/template.marko
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-stateful-reuse-widgets/components/app-stateful-button/template.marko b/test/autotests/widgets-browser/widget-stateful-reuse-widgets/components/app-stateful-button/template.marko
index 767822fa1..8a02311be 100644
--- a/test/autotests/widgets-browser/widget-stateful-reuse-widgets/components/app-stateful-button/template.marko
+++ b/test/autotests/widgets-browser/widget-stateful-reuse-widgets/components/app-stateful-button/template.marko
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-stateful-update-handler-no-match/components/app-stateful-button/template.marko b/test/autotests/widgets-browser/widget-stateful-update-handler-no-match/components/app-stateful-button/template.marko
index 767822fa1..8a02311be 100644
--- a/test/autotests/widgets-browser/widget-stateful-update-handler-no-match/components/app-stateful-button/template.marko
+++ b/test/autotests/widgets-browser/widget-stateful-update-handler-no-match/components/app-stateful-button/template.marko
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-stateful-update-handler/components/app-stateful-button/template.marko b/test/autotests/widgets-browser/widget-stateful-update-handler/components/app-stateful-button/template.marko
index 767822fa1..8a02311be 100644
--- a/test/autotests/widgets-browser/widget-stateful-update-handler/components/app-stateful-button/template.marko
+++ b/test/autotests/widgets-browser/widget-stateful-update-handler/components/app-stateful-button/template.marko
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-stateful-update/template.marko b/test/autotests/widgets-browser/widget-stateful-update/template.marko
index 767822fa1..8a02311be 100644
--- a/test/autotests/widgets-browser/widget-stateful-update/template.marko
+++ b/test/autotests/widgets-browser/widget-stateful-update/template.marko
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/test/autotests/widgets-browser/widget-stopPropagation/template.marko b/test/autotests/widgets-browser/widget-stopPropagation/template.marko
index 61065cb50..49ecbf361 100644
--- a/test/autotests/widgets-browser/widget-stopPropagation/template.marko
+++ b/test/autotests/widgets-browser/widget-stopPropagation/template.marko
@@ -1,7 +1,7 @@
-
+
Hello
-
+
Button
diff --git a/test/autotests/widgets-pages/dom-events/components/app-foo/template.marko b/test/autotests/widgets-pages/dom-events/components/app-foo/template.marko
index f58216e1a..57a0b8829 100644
--- a/test/autotests/widgets-pages/dom-events/components/app-foo/template.marko
+++ b/test/autotests/widgets-pages/dom-events/components/app-foo/template.marko
@@ -1,2 +1,2 @@
div w-bind
- button ref="button" w-onMouseMove='handleButtonMouseMove' w-onClick="handleButtonClick"
\ No newline at end of file
+ button ref="button" onMouseMove('handleButtonMouseMove') onClick("handleButtonClick")
\ No newline at end of file
diff --git a/test/autotests/widgets-pages/split-widget-renderer/components/app-button-split/template.marko b/test/autotests/widgets-pages/split-widget-renderer/components/app-button-split/template.marko
index 59eb8579e..a5fca2052 100644
--- a/test/autotests/widgets-pages/split-widget-renderer/components/app-button-split/template.marko
+++ b/test/autotests/widgets-pages/split-widget-renderer/components/app-button-split/template.marko
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/widgets/event-delegation.js b/widgets/event-delegation.js
index 3b25fdd17..b94075845 100644
--- a/widgets/event-delegation.js
+++ b/widgets/event-delegation.js
@@ -48,7 +48,7 @@ var attachBubbleEventListeners = function() {
var target;
// Attributes will have the following form:
- // w-on
="|"
+ // on("|")
do {
if ((target = getEventAttribute(curNode, attrName))) {
diff --git a/widgets/taglib/TransformHelper/handleWidgetEvents.js b/widgets/taglib/TransformHelper/handleWidgetEvents.js
index 74eb7a1fb..58fbafe5e 100644
--- a/widgets/taglib/TransformHelper/handleWidgetEvents.js
+++ b/widgets/taglib/TransformHelper/handleWidgetEvents.js
@@ -89,6 +89,7 @@ function addCustomEventListener(transformHelper, eventType, targetMethod) {
module.exports = function handleWidgetEvents() {
var el = this.el;
var builder = this.builder;
+ var context = this.context;
var isCustomTag = el.type !== 'HtmlElement';
// We configured the Marko compiler to attach a flag to nodes that
// have one or more attributes that match the "w-on*" pattern.
@@ -100,16 +101,35 @@ module.exports = function handleWidgetEvents() {
var attrs = el.getAttributes().concat([]);
attrs.forEach((attr) => {
+ var eventType;
+ var targetMethod;
var attrName = attr.name;
- if (!attrName || !attrName.startsWith('w-on')) {
+ var args = attr.argument;
+
+ if (!attrName) {
+ return;
+ }
+
+ if (attrName.startsWith('on') && args) {
+ eventType = attrName.substring(2); // Chop off "on"
+ try {
+ var parsedArgs = builder.parseExpression(args);
+ targetMethod = builder.replacePlaceholderEscapeFuncs(parsedArgs, context);
+ } catch (err) {
+ this.addError('Invalid Javascript Expression for "' + attrName + '": ' + err);
+ }
+ } else if (attrName.startsWith('w-on')) {
+ console.warn('"w-on*" attributes are deprecated. Please use "on*()" instead. (' + (el.pos ? context.getPosInfo(el.pos) : context.filename) + ')');
+ eventType = attrName.substring(4); // Chop off "w-on"
+ targetMethod = attr.value;
+ }
+
+ if (!eventType || !targetMethod) {
return;
}
el.removeAttribute(attrName);
- var eventType = attrName.substring(4); // Chop off "w-on"
- var targetMethod = attr.value;
-
if (isCustomTag) {
var widgetArgs = this.getWidgetArgs();
if (widgetArgs.getId() == null) {
@@ -165,4 +185,4 @@ module.exports = function handleWidgetEvents() {
});
}
-};
\ No newline at end of file
+};
diff --git a/widgets/taglib/marko.json b/widgets/taglib/marko.json
index a21b46f12..3db2290f0 100644
--- a/widgets/taglib/marko.json
+++ b/widgets/taglib/marko.json
@@ -64,6 +64,20 @@
}
]
},
+ "@on*": {
+ "pattern": true,
+ "type": "statement",
+ "allow-expressions": true,
+ "preserve-name": true,
+ "set-flag": "hasWidgetEvents",
+ "autocomplete": [
+ {
+ "displayText": "on(\"\")",
+ "snippet": "on${1:Click}(\"handle${2:Button}${1:Click}\")",
+ "descriptionMoreURL": "http://markojs.com/docs/marko-widgets/get-started/#adding-dom-event-listeners"
+ }
+ ]
+ },
"@w-on*": {
"pattern": true,
"type": "string",