Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
ftdomdelegate
Advanced tools
FT's dom delegate library is a component for binding to events on all target elements matching the given selector, irrespective of whether anything exists in the DOM at registration time or not. This allows developers to implement the event delegation pattern.
FT DOM Delegate is developed by FT Labs, part of the Financial Times.
The library has been deployed as part of the FT Web App and is tried and tested on the following browsers:
For older browsers (IE8) you'll need the following polyfills
The easiest way is to include the following script tag and let Polyfill.io work its magic
<script src="https://cdn.polyfill.io/v2/polyfill.js?features=Event,Array.prototype.map,Function.prototype.bind,document.querySelector,Element.prototype.matches"></script>
Get the browserify-able source from a package manager:
npm install ftdomdelegate
or
bower install ftdomdelegate
The library is written in CommonJS and so can be require
in.
// If requiring the module via CommonJS, either:-
Delegate = require('ftdomdelegate').Delegate;
myDel = new Delegate(document.body);
// Or:-
delegate = require('ftdomdelegate');
myDel = delegate(document.body);
The script must be loaded prior to instantiating a Delegate object.
To instantiate Delegate on the body
and listen to some events:
function handleButtonClicks(event) {
// Do some things
}
function handleTouchMove(event) {
// Do some other things
}
document.addEventListener('DOMContentLoaded', function() {
var delegate = new Delegate(document.body);
delegate.on('click', 'button', handleButtonClicks);
// Listen to all touch move
// events that reach the body
delegate.on('touchmove', handleTouchMove);
});
A cool trick to handle images that fail to load:
function handleImageFail() {
this.style.display = 'none';
}
document.addEventListener('DOMContentLoaded', function() {
var delegate = new Delegate(document.body);
delegate.on('error', 'img', handleImageFail);
});
Note: as of 0.1.2 you do not need to provide a DOM element at the point of instantiation, it can be set later via the root
method.
Also note: as of 0.2.0 you cannot specify more than one eventType
in a single call to off
or on
.
Delegate supports compilation with ADVANCED_OPTIMIZATIONS
('advanced mode'), which should reduce its size by about 70% (60% gzipped). Note that exposure of the Delegate
variable isn't forced therefore you must compile it along with all of your code.
Tests are run using buster and sit in test/
. To run the tests statically:
$ cd ftdomdelegate/
$ ./node_modules/.bin/buster-static -c test/buster.js
Starting server on http://localhost:8282/
...then point your browser to http://localhost:8282/.
$ ./node_modules/.bin/buster-server
buster-server running on http://localhost:1111
Point your browser to http://localhost:1111 and capture it, then in another terminal tab:
$ ./node_modules/.bin/buster-test -c test/buster.js
Code coverage is generated automatically with istanbul. The report outputs to lcov-report/index.html
.
eventType (string)
The event to listen for e.g. mousedown
, mouseup
, mouseout
, error
, click
, etc.
selector (string)
Any kind of valid CSS selector supported by matchesSelector
. Some selectors, like #id
or tag
will use optimized functions internally that check for straight matches between the ID or tag name of elements.
null
is also accepted and will match the root element set by root()
. Passing a handler function into .on
's second argument is equivalent to .on(eventType, null, handler)
.
handler (function)
Function that will handle the specified event on elements matching the given selector. The function will receive two arguments: the native event object and the target element, in that order.
useCapture (boolean)
Whether or not to listen during the capturing (pass in true
) or bubbling phase (pass in false
). If no value passed in, it will fallback to a 'sensible default', which is true
for error
, blur
and focus
events and false
for all other types.
Calling off
with no arguments will remove all registered listeners, effectively resetting the instance.
eventType (string)
Remove handlers for events matching this type considering the other parameters.
selector (string)
Only remove listeners registered with the given selector, among the other arguments.
If null passed listeners registered to the root element will be removed. Passing in a function into off
's second parameter is equivalent to .off(eventType, null, handler[, useCapture])
(the third parameter will be ignored).
handler (function)
Only remove listeners registered with the given handler function, among the other arguments. If not provided, remove all handlers.
useCapture (boolean)
Only remove listeners with useCapture
set to the value passed in. If not provided, remove listeners added with useCapture
set to true
and false
.
element (Node)
Set the delegate's root node. If no element passed in the root node will be deleted and the event listeners will be removed.
Short hand for off() and root(), ie both with no parameters. Used to reset the delegate object.
The developers of ftdomdelegate are Matthew Andrews and Matthew Caruana Galizia. Test engineering by Sam Giles. The API is influenced by jQuery Live. All open source code released by FT Labs is licenced under the MIT licence. We welcome comments, feedback and suggestions. Please feel free to raise an issue or pull request.
FAQs
FT's dom delegate library is a library for creating and binding to events on all target elements matching the given selector.
The npm package ftdomdelegate receives a total of 2,251 weekly downloads. As such, ftdomdelegate popularity was classified as popular.
We found that ftdomdelegate demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.