Sha256: 5f1ae40e594b175c61373ecebc2792e01570e40c55fe7518bb770dc636eab317

Contents?: true

Size: 1.95 KB

Versions: 34

Compression:

Stored size: 1.95 KB

Contents

'use strict';

var random = require('./random');

var onUnload = {}
  , afterUnload = false
    // detect google chrome packaged apps because they don't allow the 'unload' event
  , isChromePackagedApp = global.chrome && global.chrome.app && global.chrome.app.runtime
  ;

module.exports = {
  attachEvent: function(event, listener) {
    if (typeof global.addEventListener !== 'undefined') {
      global.addEventListener(event, listener, false);
    } else if (global.document && global.attachEvent) {
      // IE quirks.
      // According to: http://stevesouders.com/misc/test-postmessage.php
      // the message gets delivered only to 'document', not 'window'.
      global.document.attachEvent('on' + event, listener);
      // I get 'window' for ie8.
      global.attachEvent('on' + event, listener);
    }
  }

, detachEvent: function(event, listener) {
    if (typeof global.addEventListener !== 'undefined') {
      global.removeEventListener(event, listener, false);
    } else if (global.document && global.detachEvent) {
      global.document.detachEvent('on' + event, listener);
      global.detachEvent('on' + event, listener);
    }
  }

, unloadAdd: function(listener) {
    if (isChromePackagedApp) {
      return null;
    }

    var ref = random.string(8);
    onUnload[ref] = listener;
    if (afterUnload) {
      setTimeout(this.triggerUnloadCallbacks, 0);
    }
    return ref;
  }

, unloadDel: function(ref) {
    if (ref in onUnload) {
      delete onUnload[ref];
    }
  }

, triggerUnloadCallbacks: function() {
    for (var ref in onUnload) {
      onUnload[ref]();
      delete onUnload[ref];
    }
  }
};

var unloadTriggered = function() {
  if (afterUnload) {
    return;
  }
  afterUnload = true;
  module.exports.triggerUnloadCallbacks();
};

// 'unload' alone is not reliable in opera within an iframe, but we
// can't use `beforeunload` as IE fires it on javascript: links.
if (!isChromePackagedApp) {
  module.exports.attachEvent('unload', unloadTriggered);
}

Version data entries

34 entries across 33 versions & 12 rubygems

Version Path
optimacms-0.1.61 spec/dummy/node_modules/sockjs-client/lib/utils/event.js
disco_app-0.18.0 test/dummy/node_modules/sockjs-client/lib/utils/event.js
disco_app-0.18.2 test/dummy/node_modules/sockjs-client/lib/utils/event.js
disco_app-0.16.1 test/dummy/node_modules/sockjs-client/lib/utils/event.js
disco_app-0.15.2 test/dummy/node_modules/sockjs-client/lib/utils/event.js
disco_app-0.18.4 test/dummy/node_modules/sockjs-client/lib/utils/event.js
disco_app-0.18.1 test/dummy/node_modules/sockjs-client/lib/utils/event.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/sockjs-client/lib/utils/event.js
disco_app-0.14.0 test/dummy/node_modules/sockjs-client/lib/utils/event.js
disco_app-0.13.6.pre.puma.pre.3 test/dummy/node_modules/sockjs-client/lib/utils/event.js
tang-0.2.1 spec/tang_app/node_modules/sockjs-client/lib/utils/event.js
groonga-client-model-6.0.0 test/apps/rails6.0.3.5/node_modules/sockjs-client/lib/utils/event.js
groonga-client-model-6.0.0 test/apps/rails6.1.3/node_modules/sockjs-client/lib/utils/event.js
ruby2js-4.0.4 lib/tasks/testrails/node_modules/sockjs-client/lib/utils/event.js
ruby2js-4.0.3 lib/tasks/testrails/node_modules/sockjs-client/lib/utils/event.js
tang-0.2.0 spec/tang_app/node_modules/sockjs-client/lib/utils/event.js
tang-0.1.0 spec/tang_app/node_modules/sockjs-client/lib/utils/event.js
tang-0.0.9 spec/tang_app/node_modules/sockjs-client/lib/utils/event.js
enju_library-0.3.8 spec/dummy/node_modules/sockjs-client/lib/utils/event.js
ilog-0.4.1 node_modules/sockjs-client/lib/utils/event.js