| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | '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);}
 |