{"version":3,"sources":["jsdelivr-header.js","/npm/outclick@0.1.0/src/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,CCFA,SAAU,GAER,IAAI,EAAgB,CAAC,EACjB,EAAoB,CAAC,CAAC,SAAU,KAAM,WAAY,KAElD,EAAmB,KAAK,UAAU,iBAClC,EAAsB,KAAK,UAAU,oBAGzC,OAAO,eAAe,KAAK,UAAW,aAAc,CAClD,IAAK,SAAU,GAMb,OALA,EAAkB,GAAK,CACrB,WAAY,CAAC,MACb,SAAU,GAAQ,EAAK,KAAK,OAGvB,CACT,IAIF,EAAO,KAAK,UAAU,iBAAmB,SAAU,EAAM,EAAU,GACjE,GAAY,YAAR,EAAoB,CAGtB,IAFA,IAAI,EAAK,KAEF,EAAe,GAAsB,IAAhB,KAAK,UAAmB,cAWpD,OAVA,EAAc,GAAM,GAEpB,EAAa,GAAc,IAChB,KAAK,MAChB,EAAkB,KAAK,CACrB,WAAY,EACZ,SAAU,GAAY,EAAS,KAAK,MACpC,GAAI,IAGC,CACT,CACE,EAAiB,MAAM,KAAM,UAEjC,EAEA,EAAO,SAAS,iBAAiB,SAAS,SAAS,GACjD,IAAI,IAAI,EAAI,EAAkB,OAAQ,KAAK,CAIzC,IAHA,IAAI,EAAW,EAAkB,GAC7B,GAAW,EAEP,EAAI,EAAS,WAAW,OAAQ,KACtC,GAAI,EAAS,WAAW,GAAG,SAAS,EAAE,QAAS,CAC7C,GAAW,EACX,KACF,CAGE,GACF,EAAS,UAAY,EAAS,SAAS,EAE3C,CACF,IAGA,EAAO,KAAK,UAAU,oBAAsB,SAAU,EAAO,GAC3D,GAAa,YAAT,EAAqB,CACvB,IAAI,GAAM,EAEV,GAAuB,mBAAZ,GACT,IAAI,KAAK,EACP,GAAI,EAAS,YAAc,EAAc,GAAG,WAAY,CACtD,EAAK,EACL,KACF,OAGF,EAAK,EAEP,IAAI,IAAI,EAAI,EAAkB,OAAQ,KAAK,CAEzC,GADkB,EAAkB,GACrB,IAAM,EAAI,CACvB,EAAkB,OAAO,EAAE,GAC3B,KACF,CACF,CACF,MACE,EAAoB,MAAM,KAAM,UAEpC,EAGA,IAAI,EAAW,SAAS,iBAAiB,cAExC,GAAG,QAAQ,KAAK,GAAU,SAAS,GAClC,IAAI,EAAW,EAAE,aAAa,YAC1B,EAAO,SAAS,GACpB,EAAkB,KAAK,CACrB,SAAU,EACV,WAAY,CAAC,IAEjB,GAED,CAnGD,CAmGG","file":"/npm/outclick@0.1.0/src/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.19.2.\n * Original file: /npm/outclick@0.1.0/src/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/**\r\n * Version: 0.1.0\r\n * Author: Joseph Thomas\r\n */\r\n(function(window){\r\n  \r\n  var registeredIds = {}\r\n  var OutClickListeners = [{listener: null, exceptions: []}]\r\n\r\n  var addEventListener = Node.prototype.addEventListener\r\n  var removeEventListener = Node.prototype.removeEventListener\r\n\r\n  /** This handles any listener set by .onclick prototype property */\r\n  Object.defineProperty(Node.prototype, 'onoutclick', {\r\n    set: function (func) {\r\n      OutClickListeners[0] = {\r\n        exceptions: [this],\r\n        listener: func && func.bind(this)\r\n      }\r\n\r\n      return func\r\n    }\r\n  })\r\n\r\n  /** This handles all addEventListener */\r\n  window.Node.prototype.addEventListener = function (type, listener, exceptions) {\r\n    if (type == 'outclick') {\r\n      var id = null\r\n\r\n      while (registeredIds[(id = (Math.random() * 100000).toString())]) {}\r\n      registeredIds[id] = listener\r\n\r\n      exceptions = exceptions || []\r\n      exceptions.push(this)\r\n      OutClickListeners.push({\r\n        exceptions: exceptions,\r\n        listener: listener && listener.bind(this),\r\n        id: id\r\n      })\r\n\r\n      return id\r\n    } else {\r\n      addEventListener.apply(this, arguments)\r\n    }\r\n  }\r\n\r\n  window.document.addEventListener('click', function(e){\r\n    for(var i = OutClickListeners.length; i--;){\r\n      var listener = OutClickListeners[i]\r\n      var contains = false\r\n\r\n      for(var g = listener.exceptions.length; g--;){\r\n        if (listener.exceptions[g].contains(e.target)) {\r\n          contains = true\r\n          break\r\n        }\r\n      }\r\n\r\n      if(!contains){\r\n        listener.listener && listener.listener(e)\r\n      }\r\n    }\r\n  })\r\n\r\n  /** Getting rid of event listeners */\r\n  window.Node.prototype.removeEventListener = function (event, listener) {\r\n    if (event == 'outclick') {\r\n      var id = -1\r\n\r\n      if (typeof listener == 'function') {\r\n        for(i in registeredIds){\r\n          if (listener.toString() == registeredIds[i].toString()) {\r\n            id = i\r\n            break\r\n          }\r\n        }\r\n      } else {\r\n        id = listener\r\n      }\r\n      for(var i = OutClickListeners.length; i--;){\r\n        var outListener = OutClickListeners[i]\r\n        if(outListener.id == id) {\r\n          OutClickListeners.splice(i,1)\r\n          break\r\n        }\r\n      }\r\n    } else {\r\n      removeEventListener.apply(this, arguments)\r\n    }\r\n  } \r\n\r\n  /** This handles the HTML onclick property */\r\n  var elements = document.querySelectorAll('[outclick]')\r\n\r\n  ;[].forEach.call(elements, function(e){\r\n    var outclick = e.getAttribute('outclick')\r\n    var func = Function(outclick)\r\n    OutClickListeners.push({\r\n      listener: func,\r\n      exceptions: [e]\r\n    })\r\n  })\r\n\r\n})(window)"]}