All Projects β†’ fregante β†’ filter-altered-clicks

fregante / filter-altered-clicks

Licence: MIT license
Filter alt-click, ctrl-click, shift-click, middle click, ...

Programming Languages

javascript
184084 projects - #8 most used programming language

filter-altered-clicks

Filter alt-click, ctrl-click, shift-click, middle click, ...

gzipped size Travis build status npm version

Middle-clicking on a link should open it in a new tab. SPAs hijack normal links to load them via ajax, breaking all altered clicks... unless they filter-altered-clicks πŸ˜‰

Altered clicks are:

  • ALT-click
  • CTRL-click
  • SHIFT-click
  • CMD-click
  • Any clicks that aren’t left-clicks
  • Clicks that already received preventDefault(). Note

Usage

filterAlteredClicks(listener) accepts a function and returns a function.

Simplest usage:

element.addEventListener('click', filterAlteredClicks(function (e) {
	console.log('Unaltered click!');
}));

jQuery usage:

$(element).on('click', filterAlteredClicks(function (e) {
	console.log('Unaltered click!');
}));

Ajax loading example, using jQuery for brevity, but it's not necessary:

$('a.ajax-link').on('click', filterAlteredClicks(function (e) {
	$('#content').load(this.href);
	e.preventDefault();
}));

Install

Pick your favorite:

<script src="dist/filter-altered-clicks.browser.js"></script>
npm install --save filter-altered-clicks
var filterAlteredClicks = require('filter-altered-clicks');
import filterAlteredClicks from 'filter-altered-clicks';

API

filterAlteredClicks(listener, [onlyPhysical])

Returns a listener function that is called by addEventListener or jQuery.on. Receives the Event as the first parameter.

listener

Type: function

The same listener function you would pass to addEventListener(type, listener) and .on(type, listener).

onlyPhysical

Type: boolean, defaults to false

Once filtered, listener is normally not called if the event has already been defaultPrevented. Set this parameter to true to avoid this behavior.

Example:

el.addEventListener('click', filterAlteredClicks(function (e) {
	console.log('Unaltered click!');
	console.log('I’m altering this click:');
	e.preventDefault();
}));

el.addEventListener('click', filterAlteredClicks(function (e) {
	// This will never be called because the previous one used .preventDefault
}));

el.addEventListener('click', filterAlteredClicks(function (e) {
	console.log('Unaltered click! But maybe .preventDefault was already called');
}, true)); //<-- notice the true as the second parameter of filterAlteredClicks

This is called onlyPhysical because it refers to "only physical alterations", which is altered by keyboard and not by code.

Dependencies

None!

Related

  • on-off: Add and remove multiple events on multiple elements in <1KB

License

MIT Β© Federico Brigante

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].