Sha256: 5d8a06532f4292d07ef04e59554a3037639ed732c606abee72d58aeeef2a2035

Contents?: true

Size: 1.96 KB

Versions: 14

Compression:

Stored size: 1.96 KB

Contents

var slice = [].slice

function Emitter (ctx) {
    this._ctx = ctx || this
}

var EmitterProto = Emitter.prototype

EmitterProto.on = function (event, fn) {
    this._cbs = this._cbs || {}
    ;(this._cbs[event] = this._cbs[event] || [])
        .push(fn)
    return this
}

EmitterProto.once = function (event, fn) {
    var self = this
    this._cbs = this._cbs || {}

    function on () {
        self.off(event, on)
        fn.apply(this, arguments)
    }

    on.fn = fn
    this.on(event, on)
    return this
}

EmitterProto.off = function (event, fn) {
    this._cbs = this._cbs || {}

    // all
    if (!arguments.length) {
        this._cbs = {}
        return this
    }

    // specific event
    var callbacks = this._cbs[event]
    if (!callbacks) return this

    // remove all handlers
    if (arguments.length === 1) {
        delete this._cbs[event]
        return this
    }

    // remove specific handler
    var cb
    for (var i = 0; i < callbacks.length; i++) {
        cb = callbacks[i]
        if (cb === fn || cb.fn === fn) {
            callbacks.splice(i, 1)
            break
        }
    }
    return this
}

/**
 *  The internal, faster emit with fixed amount of arguments
 *  using Function.call
 */
EmitterProto.emit = function (event, a, b, c) {
    this._cbs = this._cbs || {}
    var callbacks = this._cbs[event]

    if (callbacks) {
        callbacks = callbacks.slice(0)
        for (var i = 0, len = callbacks.length; i < len; i++) {
            callbacks[i].call(this._ctx, a, b, c)
        }
    }

    return this
}

/**
 *  The external emit using Function.apply
 */
EmitterProto.applyEmit = function (event) {
    this._cbs = this._cbs || {}
    var callbacks = this._cbs[event], args

    if (callbacks) {
        callbacks = callbacks.slice(0)
        args = slice.call(arguments, 1)
        for (var i = 0, len = callbacks.length; i < len; i++) {
            callbacks[i].apply(this._ctx, args)
        }
    }

    return this
}

module.exports = Emitter

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
fluentd-ui-0.3.8 vendor/assets/javascripts/bower/vue/src/emitter.js
fluentd-ui-0.3.7 vendor/assets/javascripts/bower/vue/src/emitter.js
fluentd-ui-0.3.6 vendor/assets/javascripts/bower/vue/src/emitter.js
fluentd-ui-0.3.5 vendor/assets/javascripts/bower/vue/src/emitter.js
fluentd-ui-0.3.3 vendor/assets/javascripts/bower/vue/src/emitter.js
fluentd-ui-0.3.2 vendor/assets/javascripts/bower/vue/src/emitter.js
fluentd-ui-0.3.1 vendor/assets/javascripts/bower/vue/src/emitter.js
fluentd-ui-0.3.0 vendor/assets/javascripts/bower/vue/src/emitter.js
fluentd-ui-0.2.0 vendor/assets/javascripts/bower/vue/src/emitter.js
fluentd-ui-0.1.4 vendor/assets/javascripts/bower/vue/src/emitter.js
fluentd-ui-0.1.3 vendor/assets/javascripts/bower/vue/src/emitter.js
fluentd-ui-0.1.2 vendor/assets/javascripts/bower/vue/src/emitter.js
fluentd-ui-0.1.1 vendor/assets/javascripts/bower/vue/src/emitter.js
fluentd-ui-0.1.0 vendor/assets/javascripts/bower/vue/src/emitter.js