Browse Source

Add "keydown" modifiers

Caleb Porzio 5 years ago
parent
commit
3f66c894e1
5 changed files with 20 additions and 4 deletions
  1. 9 1
      dist/alpine.js
  2. 0 0
      dist/alpine.min.js
  3. 2 2
      dist/mix-manifest.json
  4. 5 1
      src/component.js
  5. 4 0
      src/utils.js

+ 9 - 1
dist/alpine.js

@@ -1170,6 +1170,10 @@ function () {
         var node = modifiers.includes('window') ? window : el;
 
         var _handler = function _handler(e) {
+          var modifiersWithoutWindow = modifiers.filter(function (i) {
+            return i !== 'window';
+          });
+          if (event === 'keydown' && modifiersWithoutWindow.length > 0 && !modifiersWithoutWindow.includes(Object(_utils__WEBPACK_IMPORTED_MODULE_0__["kebabCase"])(e.key))) return;
           if (modifiers.includes('prevent')) e.preventDefault();
           if (modifiers.includes('stop')) e.stopPropagation();
 
@@ -1463,13 +1467,14 @@ if (!window.Alpine && !Object(_utils__WEBPACK_IMPORTED_MODULE_2__["isTesting"])(
 /*!**********************!*\
   !*** ./src/utils.js ***!
   \**********************/
-/*! exports provided: domReady, isTesting, walkSkippingNestedComponents, debounce, onlyUnique, saferEval, saferEvalNoReturn, isXAttr, getXAttrs */
+/*! exports provided: domReady, isTesting, kebabCase, walkSkippingNestedComponents, debounce, onlyUnique, saferEval, saferEvalNoReturn, isXAttr, getXAttrs */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
 __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "domReady", function() { return domReady; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isTesting", function() { return isTesting; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "kebabCase", function() { return kebabCase; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "walkSkippingNestedComponents", function() { return walkSkippingNestedComponents; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return debounce; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onlyUnique", function() { return onlyUnique; });
@@ -1499,6 +1504,9 @@ function domReady() {
 function isTesting() {
   return navigator.userAgent, navigator.userAgent.includes("Node.js") || navigator.userAgent.includes("jsdom");
 }
+function kebabCase(subject) {
+  return subject.replace(/([a-z])([A-Z])/g, '$1-$2').replace(/[_\s]/, '-').toLowerCase();
+}
 function walkSkippingNestedComponents(el, callback) {
   var isRoot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
   if (el.hasAttribute('x-data') && !isRoot) return;

File diff suppressed because it is too large
+ 0 - 0
dist/alpine.min.js


+ 2 - 2
dist/mix-manifest.json

@@ -1,4 +1,4 @@
 {
-    "/alpine.min.js": "/alpine.min.js?id=72e352caf8d480b65f28",
-    "/alpine.js": "/alpine.js?id=ccedd9639efb0707dde5"
+    "/alpine.min.js": "/alpine.min.js?id=e0bf24150cc024d9f3bd",
+    "/alpine.js": "/alpine.js?id=5ee4269324b1d7ef5c01"
 }

+ 5 - 1
src/component.js

@@ -1,4 +1,4 @@
-import { walkSkippingNestedComponents, saferEval, saferEvalNoReturn, getXAttrs, debounce } from './utils'
+import { walkSkippingNestedComponents, kebabCase, saferEval, saferEvalNoReturn, getXAttrs, debounce } from './utils'
 
 export default class Component {
     constructor(el) {
@@ -246,6 +246,10 @@ export default class Component {
             const node = modifiers.includes('window') ? window : el
 
             const handler = e => {
+                const modifiersWithoutWindow = modifiers.filter(i => i !== 'window')
+
+                if (event === 'keydown' && modifiersWithoutWindow.length > 0 && ! modifiersWithoutWindow.includes(kebabCase(e.key))) return
+
                 if (modifiers.includes('prevent')) e.preventDefault()
                 if (modifiers.includes('stop')) e.stopPropagation()
 

+ 4 - 0
src/utils.js

@@ -16,6 +16,10 @@ export function isTesting() {
         || navigator.userAgent.includes("jsdom")
 }
 
+export function kebabCase(subject) {
+    return subject.replace(/([a-z])([A-Z])/g, '$1-$2').replace(/[_\s]/, '-').toLowerCase()
+}
+
 export function walkSkippingNestedComponents(el, callback, isRoot = true) {
     if (el.hasAttribute('x-data') && ! isRoot) return
 

Some files were not shown because too many files changed in this diff