Socket
Book a DemoInstallSign in
Socket

can-event-dom-radiochange

Package Overview
Dependencies
Maintainers
6
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

can-event-dom-radiochange - npm Package Compare versions

Comparing version

to
2.0.0

145

can-event-dom-radiochange.js
'use strict';
var domData = require('can-dom-data-state');
var getDocument = require('can-globals/document/document');
var domEvents = require('can-dom-events');
var CIDMap = require('can-cid/map/map');
function getRoot (el) {
return el.ownerDocument || getDocument().documentElement;
function getRoot () {
return getDocument().documentElement;
}
function getRegistryName (eventName) {
return 'can-event-radiochange:' + eventName + ':registry';
}
function getListenerName (eventName) {
return 'can-event-radiochange:' + eventName + ':listener';
}
function getRegistry (root, eventName) {
var name = getRegistryName(eventName);
var registry = domData.get.call(root, name);
if (!registry) {
registry = new CIDMap();
domData.set.call(root, name, registry);
}
return registry;
}
function findParentForm (el) {

@@ -54,57 +33,30 @@ while (el) {

function dispatch (eventName, target) {
var root = getRoot(target);
var registry = getRegistry(root, eventName);
registry.forEach(function (el) {
if (shouldReceiveEventFromRadio(target, el)) {
domEvents.dispatch(el, eventName);
}
});
}
function attachRootListener (root, eventName, events) {
var listenerName = getListenerName(eventName);
var listener = domData.get.call(root, listenerName);
if (listener) {
return;
}
function attachRootListener (domEvents, eventTypeTargets) {
var root = getRoot();
var newListener = function (event) {
var target = event.target;
if (isRadioInput(target)) {
dispatch(eventName, target);
if (!isRadioInput(target)) {
return;
}
for (var eventType in eventTypeTargets) {
var newEvent = {type: eventType};
var listeningNodes = eventTypeTargets[eventType];
listeningNodes.forEach(function (el) {
if (shouldReceiveEventFromRadio(target, el)) {
domEvents.dispatch(el, newEvent, false);
}
});
}
};
events.addEventListener(root, 'change', newListener);
domData.set.call(root, listenerName, newListener);
domEvents.addEventListener(root, 'change', newListener);
return newListener;
}
function detachRootListener (root, eventName, events) {
var listenerName = getListenerName(eventName);
var listener = domData.get.call(root, listenerName);
if (!listener) {
return;
}
var registry = getRegistry(root, eventName);
if (registry.size > 0) {
return;
}
events.removeEventListener(root, 'change', listener);
domData.clean.call(root, listenerName);
function detachRootListener (domEvents, listener) {
var root = getRoot();
domEvents.removeEventListener(root, 'change', listener);
}
function addListener (eventName, el, events) {
if (!isRadioInput(el)) {
throw new Error('Listeners for ' + eventName + ' must be radio inputs');
}
var root = getRoot(el);
getRegistry(root, eventName).set(el, el);
attachRootListener(root, eventName, events);
}
function removeListener (eventName, el, events) {
var root = getRoot(el);
getRegistry(root, eventName).delete(el);
detachRootListener(root, eventName, events);
}
/**

@@ -138,14 +90,55 @@ * @module {events} can-event-dom-radiochange

*/
module.exports = {
var radioChangeEvent = {
defaultEventType: 'radiochange',
addEventListener: function (target, eventName, handler) {
addListener(eventName, target, this);
target.addEventListener(eventName, handler);
addEventListener: function (target, eventType, handler) {
if (!isRadioInput(target)) {
throw new Error('Listeners for ' + eventType + ' must be radio inputs');
}
var eventTypeTrackedRadios = radioChangeEvent._eventTypeTrackedRadios;
if (!eventTypeTrackedRadios) {
eventTypeTrackedRadios = radioChangeEvent._eventTypeTrackedRadios = {};
if (!radioChangeEvent._rootListener) {
radioChangeEvent._rootListener = attachRootListener(this, eventTypeTrackedRadios);
}
}
var trackedRadios = radioChangeEvent._eventTypeTrackedRadios[eventType];
if (!trackedRadios) {
trackedRadios = radioChangeEvent._eventTypeTrackedRadios[eventType] = new Set();
}
trackedRadios.add(target);
target.addEventListener(eventType, handler);
},
removeEventListener: function (target, eventName, handler) {
removeListener(eventName, target, this);
target.removeEventListener(eventName, handler);
removeEventListener: function (target, eventType, handler) {
target.removeEventListener(eventType, handler);
var eventTypeTrackedRadios = radioChangeEvent._eventTypeTrackedRadios;
if (!eventTypeTrackedRadios) {
return;
}
var trackedRadios = eventTypeTrackedRadios[eventType];
if (!trackedRadios) {
return;
}
trackedRadios.delete(target);
if (trackedRadios.size === 0) {
delete eventTypeTrackedRadios[eventType];
for (var key in eventTypeTrackedRadios) {
if (eventTypeTrackedRadios.hasOwnProperty(key)) {
return;
}
}
delete radioChangeEvent._eventTypeTrackedRadios;
detachRootListener(this, radioChangeEvent._rootListener);
delete radioChangeEvent._rootListener;
}
}
};
module.exports = radioChangeEvent;
{
"name": "can-event-dom-radiochange",
"description": "Custom radiochange event",
"version": "1.0.5",
"version": "2.0.0",
"author": {

@@ -14,5 +14,3 @@ "name": "Chris Andrejewski",

"dependencies": {
"can-cid": "^1.1.0",
"can-dom-data-state": "^0.2.0",
"can-dom-events": "^1.0.2",
"can-dom-events": "<2.0.0",
"can-globals": "<2.0.0"

@@ -19,0 +17,0 @@ },

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.