Untitled

 avatar
unknown
plain_text
2 years ago
2.4 kB
6
Indexable
(function () {
  const EXPERIMENT_NO = 'X.X';
  const VARIANT_NO = 'X';

  const GOOGLE_ANALYTICS_TRACKING_ID = 'UA-62398555-4';

  const LOG_PREFIX = '[CONVERSION] ' + EXPERIMENT_NO + ' -->';
  const SELECTOR_PREFIX = 'conversion-' + EXPERIMENT_NO.replace('.', '-');
  const STORAGE_PREFIX = 'CONVERSION_' + EXPERIMENT_NO.replace('.', '_');

  const DEBUGGING_TOKEN_NAME = 'DEBUGGING';
  const DEBUGGING_ENABLED = document.cookie.match(
    new RegExp('(^| )' + DEBUGGING_TOKEN_NAME + '=ENABLED([^;]*)', 'i')
  );

  const utils = {};

  utils.log = (...args) => {
    DEBUGGING_ENABLED && console.log(LOG_PREFIX, ...args);
  };

  utils.error = (...args) => {
    DEBUGGING_ENABLED && console.error(LOG_PREFIX, ...args);
  };

  utils.dispatchEvent = (event) => {
    let stop;

    const check = () => {
      if (stop) return;

      if (!(
        window.ga instanceof Function &&
        window.ga.getAll instanceof Function
      )) return requestAnimationFrame(check);

      stop = true;

      const properties = window.ga.getAll();

      let analytics;

      if (GOOGLE_ANALYTICS_TRACKING_ID)
        analytics = properties.find(
          property =>
          property.get('trackingId') === GOOGLE_ANALYTICS_TRACKING_ID
        );

      analytics = analytics ? analytics : properties[0];

      if (analytics) analytics.send(
        'event',
        'Adobe Target',
        EXPERIMENT_NO + ' -- ' + VARIANT_NO,
        event, { nonInteraction: true }
      );
    };

    requestAnimationFrame(check);
  };

  utils.waitUntil = (condition, wait = 5000) => {
    return new Promise((resolve, reject) => {
      let stop;

      const timeout = wait && setTimeout(() => {
        stop = true;
        reject();
      }, wait);

      const check = () => {
        if (stop) return;
        if (!condition()) return requestAnimationFrame(check);

        clearTimeout(timeout);
        resolve(condition());
      };

      requestAnimationFrame(check);
    });
  };

  utils.dispatchEvent('experiment shown');

  try {
    const init = (() => {
      utils.log('VARIANT #' + VARIANT_NO + ' RUNNING');

      utils
        .waitUntil(() => document.body, 0)
        .then(element => element.classList.add(SELECTOR_PREFIX))
        .catch((error) => { utils.error(error); });
    })();
  }
  catch (error) {
    utils.error(error);
  }
})();
Editor is loading...