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() {
 ...