Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
"use strict";

let listeners = {};
let listening = false;

function listen() {
  if (global.addEventListener) {
    global.addEventListener('storage', change, false);
  } else if (global.attachEvent) {
    global.attachEvent('onstorage', change);
  } else {
    global.onstorage = change;
  }
}

function change(changeEvent) {
  if (!changeEvent) {
    changeEvent = global.event;
  }

  let all = listeners[changeEvent.key];

  if (all) {
    all.forEach(fire);
  }

  function fire(listener) {
    const _changeEvent = changeEvent,
          newValue = _changeEvent.newValue,
          oldValue = _changeEvent.oldValue,
          url = _changeEvent.url,
          uri = _changeEvent.uri;
    listener(JSON.parse(newValue), JSON.parse(oldValue), url || uri);
  }
}

function on(key, fn) {
  if (listeners[key]) {
    listeners[key].push(fn);
  } else {
    listeners[key] = [fn];
  }

  if (listening === false) {
    listen();
  }
}

function off(key, fn) {
  let ns = listeners[key];

  if (ns.length > 1) {
    ns.splice(ns.indexOf(fn), 1);
  } else {
    listeners[key] = [];
  }
}

module.exports = {
  on,
  off // export {
  //   on,
  //   off,
  // }
  // export default {
  //   on,
  //   off,
  // }

};