litejs
Version: 
Single-page application framework
56 lines (48 loc) • 1.08 kB
JavaScript
!function(F) {
	// Time to live - Run *onTimeout* if Function not called on time
	F.ttl = function(ms, onTimeout, scope) {
		var fn = this
		, tick = setTimeout(function() {
			ms = 0
			if (onTimeout) onTimeout()
		}, ms)
		return function() {
			clearTimeout(tick)
			if (ms) fn.apply(scope, arguments)
		}
	}
	// Run Function one time after last call
	F.once = function(ms, scope) {
		var tick, args
		, fn = this
		return function() {
			clearTimeout(tick)
			args = arguments
			tick = setTimeout(function() {
				fn.apply(scope, args)
			}, ms)
		}
	}
	// Maximum call rate for Function
	// leading edge, trailing edge
	F.rate = function(ms, last_call, _scope) {
		var tick, args
		, fn = this
		, scope = _scope
		, next = 0
		return function() {
			var now = Date.now()
			clearTimeout(tick)
			if (_scope === void 0) scope = this
			if (now >= next) {
				next = now + ms
				fn.apply(scope, arguments)
			} else if (last_call) {
				args = arguments
				tick = setTimeout(function() {
					fn.apply(scope, args)
				}, next - now)
			}
		}
	}
}(Function.prototype)