PageSourceSearch

https://www.califsol.com/assets/js/deferred-integrations.js?v=20260920-chat-intent-5

js califsol.com collected 2026-10-08 12:50:28 UTC 3,229 bytes, 81 lines download raw bytes

1(function () {
2  "use strict";
3  if (!document.querySelector(".mobile-chat-launcher")) {
4    const mobile = window.matchMedia("(max-width: 680px)");
5    const api = window.Tawk_API = window.Tawk_API || {};
6    const style = document.createElement("style");
7    style.textContent = ".mobile-chat-launcher{display:none}.mobile-chat-launcher .fa-comments::before{content:'\\f086'}@media(max-width:680px){.mobile-chat-launcher:not([hidden]){position:fixed;right:12px;bottom:72px;z-index:1000;display:grid;place-items:center;width:44px;height:44px;border:0;border-radius:50%;color:#fff;background:#087132;box-shadow:0 3px 12px rgba(0,0,0,.2);cursor:pointer;font-size:20px}.mobile-chat-launcher:focus-visible{outline:3px solid #f8bd23;outline-offset:3px}}";
8    document.head.appendChild(style);
9    const launcher = document.createElement("button");
10    launcher.className = "mobile-chat-launcher";
11    launcher.type = "button";
12    launcher.hidden = true;
13    launcher.setAttribute("aria-label", "Open live chat");
14    launcher.title = "Open live chat";
15    launcher.innerHTML = '<i class="fa-solid fa-comments" aria-hidden="true"></i>';
16    document.body.appendChild(launcher);
17    let openWhenReady = false;
18
19    function syncChat() {
20      if (!mobile.matches) {
21        launcher.hidden = true;
22        if (typeof api.showWidget === "function") api.showWidget();
23      } else if (!openWhenReady && !(typeof api.isChatMaximized === "function" && api.isChatMaximized())) {
24        launcher.hidden = false;
25        if (typeof api.hideWidget === "function") api.hideWidget();
26      }
27    }
28
29    launcher.addEventListener("click", function () {
30      openWhenReady = true;
31      launcher.hidden = true;
32      loadTawk();
33      if (typeof api.showWidget === "function") {
34        api.showWidget();
35        api.maximize();
36        openWhenReady = false;
37      }
38    });
39    api.onBeforeLoad = function () {
40      if (mobile.matches && !openWhenReady) api.hideWidget();
41    };
42    api.onLoad = function () {
43      if (openWhenReady) {
44        api.showWidget();
45        api.maximize();
46        openWhenReady = false;
47      } else if (mobile.matches && typeof api.isChatOngoing === "function" && api.isChatOngoing()) {
48        launcher.hidden = true;
49      } else {
50        syncChat();
51      }
52    };
53    api.onChatMinimized = function () {
54      if (mobile.matches) {
55        api.hideWidget();
56        launcher.hidden = false;
57      }
58    };
59    api.onChatHidden = function () {
60      if (mobile.matches) launcher.hidden = false;
61    };
62    mobile.addEventListener("change", syncChat);
63    syncChat();
64  }
65  let tawkLoaded = false;
66  function loadTawk() {
67    if (tawkLoaded || document.querySelector('script[src*="embed.tawk.to"]')) return;
68    tawkLoaded = true;
69    window.Tawk_API = window.Tawk_API || {};
70    window.Tawk_LoadStart = new Date();
71    const script = document.createElement("script");
72    script.async = true;
73    script.src = "https://embed.tawk.to/6a1dc51c0071501c2cc23f23/1jq24ju8e";
74    script.charset = "UTF-8";
75    script.setAttribute("crossorigin", "*");
76    document.head.appendChild(script);
77  }
78  window.addEventListener("load", function () {
79    window.setTimeout(loadTawk, 12000);
80  }, { once: true });
81})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.