瀏覽代碼

Bug Fix: `off` unexpectedly removes unlocked handlers.

NaotoshiFujita 3 年之前
父節點
當前提交
81fdec6c7b

+ 1 - 1
dist/js/splide-renderer.min.js

@@ -1,6 +1,6 @@
 /*!
  * Splide.js
- * Version  : 3.0.8
+ * Version  : 3.0.9
  * License  : MIT
  * Copyright: 2021 Naotoshi Fujita
  */

+ 2 - 2
dist/js/splide.cjs.js

@@ -1,6 +1,6 @@
 /*!
  * Splide.js
- * Version  : 3.0.8
+ * Version  : 3.0.9
  * License  : MIT
  * Copyright: 2021 Naotoshi Fujita
  */
@@ -332,7 +332,7 @@ function EventBus() {
     forEachEvent(events, (event, namespace) => {
       const eventHandlers = handlers[event];
       handlers[event] = eventHandlers && eventHandlers.filter((handler) => {
-        return handler._key ? handler._key !== key : handler._namespace !== namespace;
+        return handler._key ? handler._key !== key : key || handler._namespace !== namespace;
       });
     });
   }

+ 2 - 2
dist/js/splide.esm.js

@@ -1,6 +1,6 @@
 /*!
  * Splide.js
- * Version  : 3.0.8
+ * Version  : 3.0.9
  * License  : MIT
  * Copyright: 2021 Naotoshi Fujita
  */
@@ -328,7 +328,7 @@ function EventBus() {
     forEachEvent(events, (event, namespace) => {
       const eventHandlers = handlers[event];
       handlers[event] = eventHandlers && eventHandlers.filter((handler) => {
-        return handler._key ? handler._key !== key : handler._namespace !== namespace;
+        return handler._key ? handler._key !== key : key || handler._namespace !== namespace;
       });
     });
   }

+ 2 - 2
dist/js/splide.js

@@ -4,7 +4,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
 
 /*!
  * Splide.js
- * Version  : 3.0.8
+ * Version  : 3.0.9
  * License  : MIT
  * Copyright: 2021 Naotoshi Fujita
  */
@@ -368,7 +368,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
       forEachEvent(events, function (event, namespace) {
         var eventHandlers = handlers[event];
         handlers[event] = eventHandlers && eventHandlers.filter(function (handler) {
-          return handler._key ? handler._key !== key : handler._namespace !== namespace;
+          return handler._key ? handler._key !== key : key || handler._namespace !== namespace;
         });
       });
     }

File diff suppressed because it is too large
+ 0 - 0
dist/js/splide.js.map


File diff suppressed because it is too large
+ 1 - 1
dist/js/splide.min.js


二進制
dist/js/splide.min.js.gz


+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "@splidejs/splide",
-  "version": "3.0.8",
+  "version": "3.0.9",
   "description": "Splide is a lightweight, flexible and accessible slider/carousel. No dependencies, no Lighthouse errors.",
   "author": "Naotoshi Fujita",
   "license": "MIT",

+ 1 - 1
src/js/constructors/EventBus/EventBus.ts

@@ -90,7 +90,7 @@ export function EventBus(): EventBusObject {
       const eventHandlers = handlers[ event ];
 
       handlers[ event ] = eventHandlers && eventHandlers.filter( handler => {
-        return handler._key ? handler._key !== key : handler._namespace !== namespace;
+        return handler._key ? handler._key !== key : key || handler._namespace !== namespace;
       } );
     } );
   }

+ 20 - 0
src/js/constructors/EventBus/test/key.test.ts

@@ -63,4 +63,24 @@ describe( 'EventBus', () => {
     expect( onMounted ).not.toHaveBeenCalled();
     expect( onMoved ).not.toHaveBeenCalled();
   } );
+
+  test( 'should not remove a handler if a key does not match.', () => {
+    const event     = EventBus();
+    const callback1 = jest.fn();
+    const callback2 = jest.fn();
+    const callback3 = jest.fn();
+    const key       = {};
+
+    event.on( 'mounted', callback1 );
+    event.on( 'mounted', callback2, key );
+    event.on( 'mounted', callback3, key );
+
+    event.off( 'mounted', key );
+
+    event.emit( 'mounted' );
+
+    expect( callback1 ).toHaveBeenCalledTimes( 1 );
+    expect( callback2 ).not.toHaveBeenCalled()
+    expect( callback3 ).not.toHaveBeenCalled()
+  } );
 } );

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