Browse Source

:white_check_mark: Allows underscore in event names (#3756)

Eric Kwoka 1 year ago
parent
commit
6cecc7d8bd

+ 1 - 1
packages/alpinejs/src/directives.js

@@ -182,7 +182,7 @@ let alpineAttributeRegex = () => (new RegExp(`^${prefixAsString}([^:^.]+)\\b`))
 function toParsedDirectives(transformedAttributeMap, originalAttributeOverride) {
 function toParsedDirectives(transformedAttributeMap, originalAttributeOverride) {
     return ({ name, value }) => {
     return ({ name, value }) => {
         let typeMatch = name.match(alpineAttributeRegex())
         let typeMatch = name.match(alpineAttributeRegex())
-        let valueMatch = name.match(/:([a-zA-Z0-9\-:]+)/)
+        let valueMatch = name.match(/:([a-zA-Z0-9\-_:]+)/)
         let modifiers = name.match(/\.[^.\]]+(?=[^\]]*$)/g) || []
         let modifiers = name.match(/\.[^.\]]+(?=[^\]]*$)/g) || []
         let original = originalAttributeOverride || transformedAttributeMap[name] || name
         let original = originalAttributeOverride || transformedAttributeMap[name] || name
 
 

+ 14 - 0
tests/cypress/integration/directives/x-on.spec.js

@@ -585,6 +585,20 @@ test('.dot modifier correctly binds event listener',
         get('span').should(haveText('baz'))
         get('span').should(haveText('baz'))
     }
     }
 )
 )
+test('underscores are allowed in event names',
+    html`
+        <div x-data="{ foo: 'bar' }" x-on:event_name="foo = 'baz'">
+            <button x-on:click="$dispatch('event_name')"></button>
+
+            <span x-text="foo"></span>
+        </div>
+    `,
+    ({ get }) => {
+        get('span').should(haveText('bar'))
+        get('button').click()
+        get('span').should(haveText('baz'))
+    }
+)
 
 
 test('.dot modifier correctly binds event listener with namespace',
 test('.dot modifier correctly binds event listener with namespace',
     html`
     html`