
import { behavior } from '../decorator/exported';

@behavior('throttle')
export class ThrottleBehavior {
    public name: string;
    constructor(binding: any, args: any) {
        const time = args[0] || 100;
        if (binding.eventHandlerBinded) {

            binding.eventHandlerBindedBackup = binding.eventHandlerBinded;

            binding.detachedBackup = binding.detached;

            binding.detached = function () {
                binding.detachedBackup();
            };

            binding.eventHandlerBinded = function () {
                if (!this.timerBehavior) {
                    this.timerBehavior = setTimeout(() => {
                        binding.eventHandlerBindedBackup();
                        this.timerBehavior = null;
                    }, time);
                }
            }.bind(binding);

        }
    }
}
