mirror of
				https://github.com/excalidraw/excalidraw.git
				synced 2025-11-04 12:54:23 +01:00 
			
		
		
		
	feat: simple analitycs (#6683)
* Simple analytics for iframe and webpage * added logic for tracking specific categories of events to reduce it * enviroment vars clean up * fix: lint for index.html
This commit is contained in:
		@@ -20,14 +20,10 @@ REACT_APP_DEV_ENABLE_SW=
 | 
			
		||||
# whether to disable live reload / HMR. Usuaully what you want to do when
 | 
			
		||||
# debugging Service Workers.
 | 
			
		||||
REACT_APP_DEV_DISABLE_LIVE_RELOAD=
 | 
			
		||||
REACT_APP_DISABLE_TRACKING=true
 | 
			
		||||
 | 
			
		||||
FAST_REFRESH=false
 | 
			
		||||
 | 
			
		||||
# MATOMO
 | 
			
		||||
REACT_APP_MATOMO_URL=
 | 
			
		||||
REACT_APP_CDN_MATOMO_TRACKER_URL=
 | 
			
		||||
REACT_APP_MATOMO_SITE_ID=
 | 
			
		||||
 | 
			
		||||
#Debug flags
 | 
			
		||||
 | 
			
		||||
# To enable bounding box for text containers
 | 
			
		||||
 
 | 
			
		||||
@@ -11,14 +11,5 @@ REACT_APP_WS_SERVER_URL=
 | 
			
		||||
 | 
			
		||||
REACT_APP_FIREBASE_CONFIG='{"apiKey":"AIzaSyAd15pYlMci_xIp9ko6wkEsDzAAA0Dn0RU","authDomain":"excalidraw-room-persistence.firebaseapp.com","databaseURL":"https://excalidraw-room-persistence.firebaseio.com","projectId":"excalidraw-room-persistence","storageBucket":"excalidraw-room-persistence.appspot.com","messagingSenderId":"654800341332","appId":"1:654800341332:web:4a692de832b55bd57ce0c1"}'
 | 
			
		||||
 | 
			
		||||
# production-only vars
 | 
			
		||||
# GOOGLE ANALYTICS
 | 
			
		||||
REACT_APP_GOOGLE_ANALYTICS_ID=UA-387204-13
 | 
			
		||||
# MATOMO
 | 
			
		||||
REACT_APP_MATOMO_URL=https://excalidraw.matomo.cloud/
 | 
			
		||||
REACT_APP_CDN_MATOMO_TRACKER_URL=//cdn.matomo.cloud/excalidraw.matomo.cloud/matomo.js
 | 
			
		||||
REACT_APP_MATOMO_SITE_ID=1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
REACT_APP_PLUS_APP=https://app.excalidraw.com
 | 
			
		||||
REACT_APP_DISABLE_TRACKING=
 | 
			
		||||
 
 | 
			
		||||
@@ -148,33 +148,6 @@
 | 
			
		||||
      // setting this so that libraries installation reuses this window tab.
 | 
			
		||||
      window.name = "_excalidraw";
 | 
			
		||||
    </script>
 | 
			
		||||
    <% if (process.env.REACT_APP_DISABLE_TRACKING !== 'true') { %>
 | 
			
		||||
 | 
			
		||||
    <!-- Fathom - privacy-friendly analytics -->
 | 
			
		||||
    <script
 | 
			
		||||
      src="https://cdn.usefathom.com/script.js"
 | 
			
		||||
      data-site="VMSBUEYA"
 | 
			
		||||
      defer
 | 
			
		||||
    ></script>
 | 
			
		||||
    <!-- / Fathom -->
 | 
			
		||||
 | 
			
		||||
    <!-- LEGACY GOOGLE ANALYTICS -->
 | 
			
		||||
    <% if (process.env.REACT_APP_GOOGLE_ANALYTICS_ID) { %>
 | 
			
		||||
    <script
 | 
			
		||||
      async
 | 
			
		||||
      src="https://www.googletagmanager.com/gtag/js?id=%REACT_APP_GOOGLE_ANALYTICS_ID%"
 | 
			
		||||
    ></script>
 | 
			
		||||
    <script>
 | 
			
		||||
      window.dataLayer = window.dataLayer || [];
 | 
			
		||||
      function gtag() {
 | 
			
		||||
        dataLayer.push(arguments);
 | 
			
		||||
      }
 | 
			
		||||
      gtag("js", new Date());
 | 
			
		||||
      gtag("config", "%REACT_APP_GOOGLE_ANALYTICS_ID%");
 | 
			
		||||
    </script>
 | 
			
		||||
    <% } %>
 | 
			
		||||
    <!-- end LEGACY GOOGLE ANALYTICS -->
 | 
			
		||||
    <% } %>
 | 
			
		||||
 | 
			
		||||
    <!-- FIXME: remove this when we update CRA (fix SW caching) -->
 | 
			
		||||
    <style>
 | 
			
		||||
@@ -227,17 +200,39 @@
 | 
			
		||||
      <h1 class="visually-hidden">Excalidraw</h1>
 | 
			
		||||
    </header>
 | 
			
		||||
    <div id="root"></div>
 | 
			
		||||
    <% if (process.env.REACT_APP_DISABLE_TRACKING !== 'true') { %>
 | 
			
		||||
    <!-- 100% privacy friendly analytics -->
 | 
			
		||||
    <script
 | 
			
		||||
      async
 | 
			
		||||
      defer
 | 
			
		||||
      src="https://scripts.simpleanalyticscdn.com/latest.js"
 | 
			
		||||
    ></script>
 | 
			
		||||
    <noscript
 | 
			
		||||
      ><img
 | 
			
		||||
        src="https://queue.simpleanalyticscdn.com/noscript.gif"
 | 
			
		||||
        alt=""
 | 
			
		||||
        referrerpolicy="no-referrer-when-downgrade"
 | 
			
		||||
    /></noscript>
 | 
			
		||||
    <script>
 | 
			
		||||
      // need to load this script dynamically bcs. of iframe embed tracking
 | 
			
		||||
      var scriptEle = document.createElement("script");
 | 
			
		||||
      scriptEle.setAttribute(
 | 
			
		||||
        "src",
 | 
			
		||||
        "https://scripts.simpleanalyticscdn.com/latest.js",
 | 
			
		||||
      );
 | 
			
		||||
      scriptEle.setAttribute("type", "text/javascript");
 | 
			
		||||
      scriptEle.setAttribute("defer", true);
 | 
			
		||||
      scriptEle.setAttribute("async", true);
 | 
			
		||||
      // if iframe
 | 
			
		||||
      if (window.self !== window.top) {
 | 
			
		||||
        scriptEle.setAttribute("data-auto-collect", true);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      document.body.appendChild(scriptEle);
 | 
			
		||||
 | 
			
		||||
      // if iframe
 | 
			
		||||
      if (window.self !== window.top) {
 | 
			
		||||
        scriptEle.addEventListener("load", () => {
 | 
			
		||||
          if (window.sa_pageview) {
 | 
			
		||||
            window.window.sa_event(action, {
 | 
			
		||||
              category: "iframe",
 | 
			
		||||
              label: "embed",
 | 
			
		||||
              value: window.location.pathname,
 | 
			
		||||
            });
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
    </script>
 | 
			
		||||
    <!-- end LEGACY GOOGLE ANALYTICS -->
 | 
			
		||||
    <% } %>
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,9 @@ export const trackEvent = (
 | 
			
		||||
  value?: number,
 | 
			
		||||
) => {
 | 
			
		||||
  try {
 | 
			
		||||
    // place here categories that you want to track as events
 | 
			
		||||
    // KEEP IN MIND THE PRICING
 | 
			
		||||
    const ALLOWED_CATEGORIES_TO_TRACK = [] as string[];
 | 
			
		||||
    // Uncomment the next line to track locally
 | 
			
		||||
    // console.log("Track Event", { category, action, label, value });
 | 
			
		||||
 | 
			
		||||
@@ -12,12 +15,8 @@ export const trackEvent = (
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (process.env.REACT_APP_GOOGLE_ANALYTICS_ID && window.gtag) {
 | 
			
		||||
      window.gtag("event", action, {
 | 
			
		||||
        event_category: category,
 | 
			
		||||
        event_label: label,
 | 
			
		||||
        value,
 | 
			
		||||
      });
 | 
			
		||||
    if (!ALLOWED_CATEGORIES_TO_TRACK.includes(category)) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (window.sa_event) {
 | 
			
		||||
@@ -27,14 +26,6 @@ export const trackEvent = (
 | 
			
		||||
        value,
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (window.fathom) {
 | 
			
		||||
      window.fathom.trackEvent(action, {
 | 
			
		||||
        category,
 | 
			
		||||
        label,
 | 
			
		||||
        value,
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    console.error("error during analytics", error);
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user