                         event: event
                 if scan
                     scope.$scan()
+                return
+
+            handler = (event) ->
+                if filterByKey
+                    if not filterByKey[event.keyCode]
+                        return
+
+                if modifiers.length
+                    env =
+                        stop: false
+                    for modifier in modifiers
+                        modifier.fn event, env
+                        if env.stop
+                            return
+
+                if throttle
+                    if throttleId
+                        clearTimeout throttleId
+                    throttleId = setTimeout ->
+                        throttleId = null
+                        execute event
+                    , throttle
+                else if debounce
+                    if debounceTime < Date.now()
+                        debounceTime = Date.now() + debounce
+                        execute event
+                else
+                    execute event
                 return
 
             for e in eventList

            if k is 'noscan'
                scan = false
                continue

            modifier = alight.hooks.eventModifier[k]
            if modifier

        scan = true
        modifiers = []
        filterByKey = null
        throttle = null
        throttleId = null
        debounce = null
        debounceTime = 0

        modifier = alight.hooks.eventModifier[eventName]
        if modifier
