suspend jQuery plugin
by Amine Tbaik
HTML
this square div has two jQuery events, mouseenter and mouseleave<br>
hover it and try the buttons to see the effect on events.
<div></div>
<input type='button' value='suspend'>
<input type='button' value='unsuspend'>
<input type='button' value='toggle suspend'>
CSS
div{
width: 50px;
height: 50px;
background-color: green;
margin: 10px;
}
JavaScript
/* ([,events][,handler])
events(string): specific events to suspend/unsuspend if you dont want to apply the method on all events seperated by space.
handler(function): a function to expecute whel suspending/unsuspending
*/
$.fn.unsuspend = function(events, f) {
if(arguments.length===1) {
f = events;
events = '';
}
return $(this)
.on('unsuspend', function(e) {
if (f != undefined) f(e);
})
.trigger('unsuspend')
.on(events)
.off('suspend unsuspend');
}
$.fn.suspend = function(events,f) {
let events_scrap = jQuery._data($(this)[0], 'events');
if (events_scrap == undefined) events_scrap = [];
if(!('unsuspend' in events_scrap)){
if(arguments.length===1) {
f = events;
events = undefined;
}
return $(this).on('suspend', function(e) {
$(this).each(function(index, elem) {
let events_scrap = {};
$.each(jQuery._data($(elem)[0], "events"), function(event_index, event_name) {
events_scrap[event_name[0].origType] = event_name[0].handler
})
$(elem).off(events)
.on('unsuspend', function() {
$.each(events_scrap, function(event_name, event_handler) {
$(elem).on(event_name, event_handler)
})
})
})
if (f != undefined) f(e)
}).trigger('suspend')
}
}
$.fn.toggleSuspend = function(events, f) {
if(arguments.length===1) {
f = events;
events = undefined;
}
if(typeof override != 'boolean') override = true;
let events_scrap = jQuery._data($(this)[0], 'events')
if (events_scrap == undefined) events_scrap = []
'unsuspend' in events_scrap ? $(this).unsuspend(events, f) : $(this).suspend(events, f);
}
$('div')
.mouseenter(function() {
$(this).css('background', 'red')
})
.mouseleave(function() {
$(this).css('background', 'green')
})
$('[value=suspend]').click(function() {
$('div').suspend()
})
$('[value=unsuspend]').click(function() {
...