Skip to content

Commit 3d82630

Browse files
Bumped version to 3.2.0
1 parent 43f8170 commit 3d82630

8 files changed

Lines changed: 99 additions & 70 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
### Version 3.2.0
2+
- Readme: updated sizes
3+
- $.fn.off: added support for removing delegated handlers
4+
15
### Version 3.1.0
26
- Improved support for running selectors inside documents
37
- Ensuring Cash collections are iterable

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ If you're migrating from jQuery be sure to read our [migration guide](https://gi
3030

3131
## Usage
3232

33-
Get Cash from [CloudFlare](https://cdnjs.cloudflare.com/ajax/libs/cash/3.1.0/cash.min.js) or [jsDelivr](https://cdn.jsdelivr.net/npm/cash-dom@3.1.0/dist/cash.min.js) and use it like this:
33+
Get Cash from [CloudFlare](https://cdnjs.cloudflare.com/ajax/libs/cash/3.2.0/cash.min.js) or [jsDelivr](https://cdn.jsdelivr.net/npm/cash-dom@3.2.0/dist/cash.min.js) and use it like this:
3434

3535
```html
36-
<script src="https://cdnjs.cloudflare.com/ajax/libs/cash/3.1.0/cash.min.js"></script>
36+
<script src="https://cdnjs.cloudflare.com/ajax/libs/cash/3.2.0/cash.min.js"></script>
3737
<script>
3838
$(function () {
3939
$('html').addClass ( 'dom-loaded' );

dist/cash.d.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,10 @@ interface Cash {
146146
show(): this;
147147
}
148148
interface Cash {
149-
off(events?: string, callback?: Function): this;
149+
off(): this;
150+
off(events: string): this;
151+
off(events: string, callback: Function): this;
152+
off(events: string, selector: string, callback: Function): this;
150153
}
151154
interface Cash {
152155
on(events: plainObject): this;

dist/cash.esm.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -511,11 +511,11 @@ function getEventsCache(ele) {
511511
}
512512
// @require core/guid.ts
513513
// @require events/helpers/get_events_cache.ts
514-
function addEvent(ele, name, namespaces, callback) {
514+
function addEvent(ele, name, namespaces, selector, callback) {
515515
callback['guid'] = (callback['guid'] || guid++);
516516
const eventCache = getEventsCache(ele);
517517
eventCache[name] = (eventCache[name] || []);
518-
eventCache[name].push([namespaces, callback]);
518+
eventCache[name].push([namespaces, selector, callback]);
519519
ele.addEventListener(name, callback); //TSC
520520
}
521521
// @require ./variables.ts
@@ -526,30 +526,34 @@ function parseEventName(eventName) {
526526
// @require ./get_events_cache.ts
527527
// @require ./has_namespaces.ts
528528
// @require ./parse_event_name.ts
529-
function removeEvent(ele, name, namespaces, callback) {
529+
function removeEvent(ele, name, namespaces, selector, callback) {
530530
const cache = getEventsCache(ele);
531531
if (!name) {
532532
for (name in cache) {
533-
removeEvent(ele, name, namespaces, callback);
533+
removeEvent(ele, name, namespaces, selector, callback);
534534
}
535535
delete ele[eventsNamespace];
536536
}
537537
else if (cache[name]) {
538-
cache[name] = cache[name].filter(([ns, cb]) => {
539-
if ((callback && cb['guid'] !== callback['guid']) || !hasNamespaces(ns, namespaces))
538+
cache[name] = cache[name].filter(([ns, sel, cb]) => {
539+
if ((callback && cb['guid'] !== callback['guid']) || !hasNamespaces(ns, namespaces) || (selector && selector !== sel))
540540
return true;
541541
ele.removeEventListener(name, cb);
542542
});
543543
}
544544
}
545-
Cash.prototype.off = function (eventFullName, callback) {
545+
Cash.prototype.off = function (eventFullName, selector, callback) {
546546
if (eventFullName === undefined) {
547547
this.each((i, ele) => removeEvent(ele));
548548
}
549549
else {
550+
if (isFunction(selector)) {
551+
callback = selector;
552+
selector = '';
553+
}
550554
each(getSplitValues(eventFullName), (i, eventFullName) => {
551555
const [name, namespaces] = parseEventName(getEventNameBubbling(eventFullName));
552-
this.each((i, ele) => removeEvent(ele, name, namespaces, callback));
556+
this.each((i, ele) => removeEvent(ele, name, namespaces, selector, callback)); //TSC
553557
});
554558
}
555559
return this;
@@ -594,15 +598,15 @@ function on(eventFullName, selector, callback, _one) {
594598
}
595599
const returnValue = callback.call(thisArg, event, event.data); //TSC
596600
if (_one) {
597-
removeEvent(ele, name, namespaces, finalCallback);
601+
removeEvent(ele, name, namespaces, selector, finalCallback); //TSC
598602
}
599603
if (returnValue === false) {
600604
event.preventDefault();
601605
event.stopPropagation();
602606
}
603607
};
604608
finalCallback['guid'] = callback['guid'] = (callback['guid'] || guid++);
605-
addEvent(ele, name, namespaces, finalCallback);
609+
addEvent(ele, name, namespaces, selector, finalCallback); //TSC
606610
});
607611
});
608612
return this;

dist/cash.js

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -649,11 +649,11 @@ function getEventsCache(ele) {
649649
// @require events/helpers/get_events_cache.ts
650650

651651

652-
function addEvent(ele, name, namespaces, callback) {
652+
function addEvent(ele, name, namespaces, selector, callback) {
653653
callback['guid'] = callback['guid'] || guid++;
654654
var eventCache = getEventsCache(ele);
655655
eventCache[name] = eventCache[name] || [];
656-
eventCache[name].push([namespaces, callback]);
656+
eventCache[name].push([namespaces, selector, callback]);
657657
ele.addEventListener(name, callback); //TSC
658658
} // @require ./variables.ts
659659

@@ -666,41 +666,48 @@ function parseEventName(eventName) {
666666
// @require ./parse_event_name.ts
667667

668668

669-
function removeEvent(ele, name, namespaces, callback) {
669+
function removeEvent(ele, name, namespaces, selector, callback) {
670670
var cache = getEventsCache(ele);
671671

672672
if (!name) {
673673
for (name in cache) {
674-
removeEvent(ele, name, namespaces, callback);
674+
removeEvent(ele, name, namespaces, selector, callback);
675675
}
676676

677677
delete ele[eventsNamespace];
678678
} else if (cache[name]) {
679679
cache[name] = cache[name].filter(function (_a) {
680680
var ns = _a[0],
681-
cb = _a[1];
682-
if (callback && cb['guid'] !== callback['guid'] || !hasNamespaces(ns, namespaces)) return true;
681+
sel = _a[1],
682+
cb = _a[2];
683+
if (callback && cb['guid'] !== callback['guid'] || !hasNamespaces(ns, namespaces) || selector && selector !== sel) return true;
683684
ele.removeEventListener(name, cb);
684685
});
685686
}
686687
}
687688

688-
Cash.prototype.off = function (eventFullName, callback) {
689+
Cash.prototype.off = function (eventFullName, selector, callback) {
689690
var _this = this;
690691

691692
if (eventFullName === undefined) {
692693
this.each(function (i, ele) {
693694
return removeEvent(ele);
694695
});
695696
} else {
697+
if (isFunction(selector)) {
698+
callback = selector;
699+
selector = '';
700+
}
701+
696702
each(getSplitValues(eventFullName), function (i, eventFullName) {
697703
var _a = parseEventName(getEventNameBubbling(eventFullName)),
698704
name = _a[0],
699705
namespaces = _a[1];
700706

701707
_this.each(function (i, ele) {
702-
return removeEvent(ele, name, namespaces, callback);
703-
});
708+
return removeEvent(ele, name, namespaces, selector, callback);
709+
}); //TSC
710+
704711
});
705712
}
706713

@@ -759,7 +766,7 @@ function on(eventFullName, selector, callback, _one) {
759766
var returnValue = callback.call(thisArg, event, event.data); //TSC
760767

761768
if (_one) {
762-
removeEvent(ele, name, namespaces, finalCallback);
769+
removeEvent(ele, name, namespaces, selector, finalCallback); //TSC
763770
}
764771

765772
if (returnValue === false) {
@@ -769,7 +776,7 @@ function on(eventFullName, selector, callback, _one) {
769776
};
770777

771778
finalCallback['guid'] = callback['guid'] = callback['guid'] || guid++;
772-
addEvent(ele, name, namespaces, finalCallback);
779+
addEvent(ele, name, namespaces, selector, finalCallback); //TSC
773780
});
774781
});
775782
return this;

0 commit comments

Comments
 (0)