Skip to content

Instantly share code, notes, and snippets.

@danielvlopes
Created January 14, 2021 03:35
Show Gist options
  • Save danielvlopes/8ec4b30bd5fbaa9322ef3ac8c1b03768 to your computer and use it in GitHub Desktop.
Save danielvlopes/8ec4b30bd5fbaa9322ef3ac8c1b03768 to your computer and use it in GitHub Desktop.
Adding support for Turbo to Intercom
!(function (e) {
var t = {};
function n(o) {
if (t[o]) return t[o].exports;
var r = (t[o] = { i: o, l: !1, exports: {} });
return e[o].call(r.exports, r, r.exports, n), (r.l = !0), r.exports;
}
(n.m = e),
(n.c = t),
(n.d = function (e, t, o) {
n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: o });
}),
(n.r = function (e) {
"undefined" != typeof Symbol &&
Symbol.toStringTag &&
Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }),
Object.defineProperty(e, "__esModule", { value: !0 });
}),
(n.t = function (e, t) {
if ((1 & t && (e = n(e)), 8 & t)) return e;
if (4 & t && "object" == typeof e && e && e.__esModule) return e;
var o = Object.create(null);
if (
(n.r(o),
Object.defineProperty(o, "default", { enumerable: !0, value: e }),
2 & t && "string" != typeof e)
)
for (var r in e)
n.d(
o,
r,
function (t) {
return e[t];
}.bind(null, r)
);
return o;
}),
(n.n = function (e) {
var t =
e && e.__esModule
? function () {
return e.default;
}
: function () {
return e;
};
return n.d(t, "a", t), t;
}),
(n.o = function (e, t) {
return Object.prototype.hasOwnProperty.call(e, t);
}),
(n.p = "https://js.intercomcdn.com/"),
n((n.s = 935));
})({
13: function (e, t, n) {
"use strict";
n.d(t, "d", function () {
return c;
}),
n.d(t, "c", function () {
return u;
}),
n.d(t, "g", function () {
return s;
}),
n.d(t, "h", function () {
return d;
}),
n.d(t, "e", function () {
return l;
}),
n.d(t, "b", function () {
return m;
}),
n.d(t, "f", function () {
return p;
}),
n.d(t, "j", function () {
return f;
}),
n.d(t, "i", function () {
return w;
});
var o = n(8),
r = /iphone|ipad|ipod|android|blackberry|opera mini|iemobile/i,
i = [
".intercom-lightweight-app-launcher",
".intercom-launcher-frame",
"#intercom-container",
".intercom-messenger",
".intercom-notifications",
];
function a(e) {
try {
if (!(e in window)) return !1;
var t = window[e];
return (
null !== t &&
(t.setItem("intercom-test", "0"), t.removeItem("intercom-test"), !0)
);
} catch (e) {
return !1;
}
}
function c() {
return a("localStorage");
}
function u() {
return !!(
window.FileReader &&
window.File &&
window.FileList &&
window.FormData
);
}
function s() {
var e = m().userAgent;
return !!e && null !== e.match(r) && void 0 !== window.parent;
}
function d() {
var e = m().vendor || "",
t = m().userAgent || "";
return 0 === e.indexOf("Apple") && /\sSafari\//.test(t);
}
function l(e) {
void 0 === e && (e = window);
var t = m(),
n = "Google Inc." === t.vendor && !e.chrome;
return "" === t.languages && (t.webdriver || n);
}
function m() {
return navigator || {};
}
function p(e) {
return (
void 0 === e && (e = m().userAgent),
/iPad|iPhone|iPod/.test(e) && !window.MSStream
);
}
function f() {
return (
!Object(o.a)() &&
i.some(function (e) {
var t = window.parent.document.querySelector(e);
if (t) {
var n = window.getComputedStyle(t);
return null === n || "none" === n.display;
}
})
);
}
var w = function () {
return "ontouchstart" in window || navigator.maxTouchPoints > 0;
};
t.a = {
hasXhr2Support: function () {
return (
"XMLHttpRequest" in window &&
"withCredentials" in new XMLHttpRequest()
);
},
hasLocalStorageSupport: c,
hasSessionStorageSupport: function () {
return a("sessionStorage");
},
hasFileSupport: u,
hasAudioSupport: function () {
var e = document.createElement("audio");
return (
!!e.canPlayType && !!e.canPlayType("audio/mpeg;").replace(/^no$/, "")
);
},
hasVisibilitySupport: function () {
return (
void 0 !== document.hidden ||
void 0 !== document.mozHidden ||
void 0 !== document.msHidden ||
void 0 !== document.webkitHidden
);
},
messengerIsVisible: function () {
return (
!!Object(o.a)() ||
i.some(function (e) {
var t = window.parent.document.querySelector(e);
if (t) {
var n = t.getBoundingClientRect();
return n && n.width > 0 && n.height > 0;
}
})
);
},
messengerHasDisplayNoneSet: f,
isMobileBrowser: s,
isIOSFirefox: function () {
return !!m().userAgent.match("FxiOS");
},
isFirefox: function () {
return !!m().userAgent.match("Firefox");
},
isSafari: d,
isElectron: function () {
var e = m().userAgent || "",
t = window.parent || {},
n = t.process && t.versions && t.versions.electron;
return /\sElectron\//.test(e) || n;
},
isIE: function () {
var e = m().userAgent || "";
return e.indexOf("MSIE") > 0 || e.indexOf("Trident") > 0;
},
isEdge: function () {
return (m().userAgent || "").indexOf("Edge") > 0;
},
isNativeMobile: function () {
return m().isNativeMobile;
},
isChrome: function () {
var e = window.chrome,
t = m().vendor,
n = m().userAgent.indexOf("OPR") > -1,
o = m().userAgent.indexOf("Edge") > -1;
return (
!!m().userAgent.match("CriOS") ||
(null != e && "Google Inc." === t && !1 === n && !1 === o)
);
},
isIOS: p,
isAndroid: function (e) {
return (
void 0 === e && (e = m().userAgent),
e && e.toLowerCase().indexOf("android") > -1
);
},
};
},
247: function (e, t, n) {
"use strict";
n.d(t, "b", function () {
return r;
}),
n.d(t, "a", function () {
return i;
});
var o = n(13),
r = function (e, t, n) {
void 0 === n && (n = "en"),
o.a.isFirefox() &&
(e.contentDocument.open(), e.contentDocument.close()),
(function (e, t, n) {
void 0 === n && (n = "en"),
(e.documentElement.innerHTML = t),
e.documentElement.setAttribute("lang", n);
})(e.contentDocument, t, n);
},
i = function (e) {
var t = document.createElement("script");
return (
(t.type = "text/javascript"), (t.charset = "utf-8"), (t.src = e), t
);
};
},
253: function (e, t) {
e.exports = {
source_map: "hidden-source-map",
api_base: "https://api-iam.intercom.io",
public_path: "https://js.intercomcdn.com/",
sheets_proxy_path: "https://intercom-sheets.com/sheets_proxy",
sentry_proxy_path: "https://www.intercom-reporting.com/sentry/index.html",
install_mode_base: "https://app.intercom.com",
sentry_dsn:
"https://[email protected]/24287",
intersection_js: "https://js.intercomcdn.com/intersection/assets/app.js",
intersection_styles:
"https://js.intercomcdn.com/intersection/assets/styles.js",
article_search_messenger_app_id: 27,
mode: "production",
};
},
8: function (e, t, n) {
"use strict";
n.d(t, "a", function () {
return o;
});
var o = function () {
return window.INTERCOM_PRIVILEGE_SEPARATION;
};
},
935: function (e, t, n) {
e.exports = n(957);
},
957: function (e, t, n) {
"use strict";
n.r(t);
var o = [
"position: absolute !important;",
"opacity: 0 !important;",
"width: 1px !important;",
"height: 1px !important;",
"top: 0 !important;",
"left: 0 !important;",
"border: none !important;",
"display: block !important;",
"pointer-events: none !important;",
].join(" "),
r = function (e) {
var t = e.document.createElement("iframe");
return t.setAttribute("style", o), t;
};
var i = function (e) {
var t = {};
return (
Object.keys(e).forEach(function (n) {
n.indexOf("intercom") > -1 && (t[n] = e[n]);
}),
t
);
},
a = function (e, t, n) {
!(function (e) {
if (null == e) throw new TypeError("Cannot destructure undefined");
})(t),
e.postMessage(
{
type: "intercom:callback",
payload: {
localStorage: i(window.localStorage),
sessionStorage: i(window.sessionStorage),
},
callbackId: n,
},
"*"
);
};
function c(e, t) {
var n = Object.keys(e);
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(e);
t &&
(o = o.filter(function (t) {
return Object.getOwnPropertyDescriptor(e, t).enumerable;
})),
n.push.apply(n, o);
}
return n;
}
function u(e, t, n) {
return (
t in e
? Object.defineProperty(e, t, {
value: n,
enumerable: !0,
configurable: !0,
writable: !0,
})
: (e[t] = n),
e
);
}
var s = function (e) {
return (function (e) {
for (var t = 1; t < arguments.length; t++) {
var n = null != arguments[t] ? arguments[t] : {};
t % 2
? c(n, !0).forEach(function (t) {
u(e, t, n[t]);
})
: Object.getOwnPropertyDescriptors
? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n))
: c(n).forEach(function (t) {
Object.defineProperty(
e,
t,
Object.getOwnPropertyDescriptor(n, t)
);
});
}
return e;
})({}, d(e), {}, l(e));
},
d = function (e) {
var t, n;
return {
location: null == e ? void 0 : e.location,
referrer:
null == e
? void 0
: null === (t = e.document) || void 0 === t
? void 0
: t.referrer,
title:
null == e
? void 0
: null === (n = e.document) || void 0 === n
? void 0
: n.title,
};
},
l = function (e) {
return { innerHeight: e.innerHeight, innerWidth: e.innerWidth };
};
var m = function (e, t, n) {
!(function (e) {
if (null == e) throw new TypeError("Cannot destructure undefined");
})(t),
window.requestAnimationFrame(function (t) {
e.postMessage(
{ type: "intercom:callback", payload: t, callbackId: n },
"*"
);
});
},
p = [],
f = 0,
w = function (e) {
for (; 2 > p.length; ) p.push(v(e));
},
v = function (e) {
return (function (e, t) {
var o = r(e);
(o.src = n.p + "component.html"),
(o.name = "intercom-component-" + t),
(o.loaded = !1);
return (
o.addEventListener("load", function e() {
(o.loaded = !0), o.removeEventListener("load", e);
}),
e.document.body.appendChild(o),
o
);
})(e, f++);
},
g = function (e, t, n, o) {
!(function (e, t) {
var n = p.shift();
n || (n = v(e));
var o = function e() {
n.removeEventListener("load", e), t(n);
};
n.loaded ? setTimeout(o, 0) : n.addEventListener("load", o), w(e);
})(e, function (e) {
(e.dataset.name = t), (e.style.cssText = n), o(e);
});
},
h = function (e, t, n, o) {
var r = e.document.querySelector('iframe[data-name="' + t + '"]');
r
? (function (e, t, n) {
(e.style.cssText = t),
setTimeout(function () {
return n(e);
}, 0);
})(r, n, o)
: g(e, t, n, o);
},
y = function (e, t, n) {
var o = t.name,
r = t.styles;
h(window, o, r, function (t) {
e.postMessage(
{
type: "intercom:callback",
payload: { frameName: t.name },
callbackId: n,
},
"*"
);
});
},
b = function (e) {
var t,
n = !1,
o =
(function (e) {
return e.Intercom && e.Intercom.q;
})(e) || [],
r = function (e) {
if (
((n = e[0]),
-1 !== ["boot", "update", "shutdown", "show", "hide"].indexOf(n))
) {
var n,
o = {
type: "intercom:api-call",
payload: { args: Array.from(e) },
};
t.postMessage(o, "*");
} else
console.warn(
"Intercom – API call not supported with Privilege Separation:",
e
);
},
i = function (e) {
"intercom:ready" === e.data.type &&
((n = !0),
(t = e.source),
(function () {
for (; o.length; ) r(o.pop());
})());
};
return (
e.addEventListener("message", i),
(e.Intercom = function () {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++)
t[i] = arguments[i];
n ? r(t) : o.push(t);
}),
function () {
e.removeEventListener("message", i), delete e.Intercom, (n = !1);
}
);
},
S = function (e) {
var t,
n,
o,
r = e.source,
i = e.data,
c = e.origin;
if (
"http://intercom-js.test" === c ||
"https://js.intercomcdn.com" === c
)
switch (i.type) {
case "intercom:ready":
!(function (e) {
var t = window.intercomSettings;
if (t) {
var n = window.location.href,
o = document.cookie;
e.postMessage(
{
type: "intercom:boot",
payload: { settings: t, url: n, cookie: o },
},
"*"
);
}
})(r, i.payload),
window.addEventListener(
"resize",
(function (e) {
return function () {
e.postMessage(
{
type: "intercom:window-resize",
payload: { updates: l(window) },
},
"*"
);
};
})(r)
);
break;
case "intercom:create-or-update-frame":
y(r, i.payload, i.callbackId);
break;
case "intercom:destroy-frame":
(t = i.payload),
(n = t.name),
(o = document.querySelector('iframe[data-name="' + n + '"]')) &&
o.remove();
break;
case "intercom:write-cookie":
!(function (e, t) {
var n = t.cookie;
window.document.cookie = n;
})(0, i.payload, i.callbackId);
break;
case "intercom:set-item-for-storage":
!(function (e, t) {
var n = t.type,
o = t.key,
r = t.value,
i =
"localStorage" === n
? window.localStorage
: window.sessionStorage;
try {
i.setItem(o, r);
} catch (e) {}
})(0, i.payload);
break;
case "intercom:remove-item-from-storage":
!(function (e, t) {
var n = t.type,
o = t.key,
r =
"localStorage" === n
? window.localStorage
: window.sessionStorage;
try {
r.removeItem(o);
} catch (e) {}
})(0, i.payload);
break;
case "intercom:create-storage-state":
a(r, i.payload, i.callbackId);
break;
case "intercom:window-request-animation-frame":
m(r, i.payload, i.callbackId);
break;
case "intercom:open-url":
!(function (e, t) {
var n = t.url;
if (t.openNatively) window.open(n);
else {
var o = window.open();
if (!o) return;
(o.opener = null), (o.location = n);
}
})(0, i.payload);
}
},
O = function () {
var e = s(window);
return (
"window=" + encodeURIComponent(JSON.stringify(e)) + "&localStorage="
);
},
I = function (e) {
if (
!(function (e) {
return e.document.querySelector(
'iframe[name="intercom-messenger"]'
);
})(e)
) {
b(e);
var t = r(e);
(t.name = "intercom-messenger"),
(t.src = n.p + "frame.html?" + O()),
e.document.body.appendChild(t),
e.addEventListener("message", S),
w(e);
}
},
E = [
/intercom-privilege-separation-enabled/,
/^https:\/\/www\.intercom\.com\/legal\/terms-and-policies/,
],
j = function (e) {
return (
!0 === e.INTERCOM_PRIVILEGE_SEPARATION ||
E.some(function (t) {
return t.test(e.location.href);
})
);
},
A = ["turbo:visit", "turbolinks:visit", "page:before-change"],
x = ["turbo:before-cache", "turbolinks:before-cache"],
k = ["turbo:load", "turbolinks:load", "page:change"];
var _ = n(247),
P = n(253).public_path;
var M = P + "frame.f9b022ce.js",
L = P + "vendor.cdd252af.js",
C = P + "frame-modern.c4016961.js",
T = P + "vendor-modern.9a7cb227.js",
q = /bot|googlebot|crawler|spider|robot|crawling|facebookexternalhit/i,
N = function () {
return window.Intercom && window.Intercom.booted;
},
R = function () {
var e,
t =
!!(e = navigator.userAgent.match(/Chrom(?:e|ium)\/([0-9\.]+)/)) &&
e[1];
return (
!!t &&
t.split(".").map(function (e) {
return parseInt(e);
})
);
},
D = function () {
var e = document.querySelector('meta[name="referrer"]'),
t = e ? '<meta name="referrer" content="' + e.content + '">' : "",
n = document.createElement("iframe");
(n.id = "intercom-frame"),
n.setAttribute(
"style",
"position: absolute !important; opacity: 0 !important; width: 1px !important; height: 1px !important; top: 0 !important; left: 0 !important; border: none !important; display: block !important; z-index: -1 !important; pointer-events: none;"
),
n.setAttribute("aria-hidden", "true"),
n.setAttribute("tabIndex", "-1"),
n.setAttribute("title", "Intercom"),
document.body.appendChild(n),
Object(_.b)(
n,
'<!doctype html>\n <html lang="en">\n <head>\n ' +
t +
"\n </head>\n <body>\n </body>\n </html>"
);
var o,
r = !!(o = R()) && o[0] >= 81,
i = Object(_.a)(r ? C : M),
a = Object(_.a)(r ? T : L);
return (
n.contentDocument.head.appendChild(i),
n.contentDocument.head.appendChild(a),
(window.__intercomAssignLocation = function (e) {
window.location.assign(e);
}),
n
);
},
F = function () {
var e = document.getElementById("intercom-frame");
e && e.parentNode && e.parentNode.removeChild(e),
delete window.__intercomAssignLocation;
},
H = function () {
if (!window.Intercom) {
var e = function e() {
for (var t = arguments.length, n = new Array(t), o = 0; o < t; o++)
n[o] = arguments[o];
e.q.push(n);
};
(e.q = []), (window.Intercom = e);
}
},
z = function () {
N() || (H(), D(), (window.Intercom.booted = !0));
};
j(window)
? I(window)
: ("attachEvent" in window && !window.addEventListener) ||
(navigator &&
navigator.userAgent &&
/MSIE 9\.0/.test(navigator.userAgent) &&
window.addEventListener &&
!window.atob) ||
("onpropertychange" in document &&
window.matchMedia &&
/MSIE 10\.0/.test(navigator.userAgent)) ||
(navigator && navigator.userAgent && q.test(navigator.userAgent)) ||
window.isIntercomMessengerSheet ||
N() ||
(z(),
(function (e, t, n) {
k.forEach(function (t) {
document.addEventListener(t, e);
}),
x.forEach(function (e) {
document.addEventListener(e, t);
}),
A.forEach(function (e) {
document.addEventListener(e, n);
});
})(z, F, function () {
window.Intercom("shutdown", !1), delete window.Intercom, F(), H();
}));
},
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment