UNPKG

jquery.bouncer

Version:

Defers event handler until a duration has lapsed or a given event has occurred.

4 lines 1.9 kB
/*! jQuery Bouncer - v1.0.0-beta - 2015-02-09 * https://github.com/tableau-mkt/jquery.bouncer * Copyright (c) 2015 Joel Walters; Licensed MIT */ !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a:a(window.jQuery)}(function(a){"use strict";function b(b,e){this.element=b,this.options=a.extend({},d,e),this._defaults=d,this._name=c,this.init()}var c="bouncer",d={wait:5e3,events:"click.bouncer",activeClass:"is-processing",resolveEvent:"bouncer:resolve",rejectEvent:"bouncer:reject"};b.prototype={init:function(){return this.$element=a(this.element),this.initTime=(new Date).getTime(),this.deferred=a.Deferred(),this.deferred.done(a.proxy(function(b){b=b||{},b.preserveActiveClass||this.$element.removeClass(this.options.activeClass),this.event&&(delete this.event.isDefaultPrevented,delete this.event.isImmediatePropagationStopped,delete this.event.isPropagationStopped,this.$element.trigger(a.Event(this.event.type,this.event)))},this)),this.$element.on(this.options.events,a.proxy(this.eventHandler,this)),this.$element.on(this.options.resolveEvent,a.proxy(this.resolveHandler,this)),this.$element.on(this.options.rejectEvent,a.proxy(this.rejectHandler,this)),this.deferred},resolveHandler:function(a,b){this.deferred.resolve(b)},rejectHandler:function(a,b){this.deferred.reject(b)},eventHandler:function(a){var b,c,d=this,e="resolved"===this.deferred.state();b=(new Date).getTime()-this.initTime,c=b>this.options.wait,c||e||(this.event=a,a.preventDefault(),a.stopImmediatePropagation(),this.processingTimeoutId||(this.$element.addClass(this.options.activeClass),this.processingTimeoutId=setTimeout(function(){d.deferred.resolve()},this.options.wait-b)))}},a.fn[c]=function(d){var e,f=[];return this.each(function(){a.data(this,"plugin_"+c)||(e=new b(this,d),f.push(e.deferred),a.data(this,"plugin_"+c,e))}),a.when.apply(this,f)}});