You are here

function advagg_relocate_js_script_rewrite_list in Advanced CSS/JS Aggregation 7.2

Alter the js array.

Parameters

string $key: Key that can be used to lookup the value from the js array.

array $value: Inner part of the js array.

array $aggregate_settings: Array of settings.

Return value

array An array of inline scripts found and locations for them in the file.

Related topics

3 calls to advagg_relocate_js_script_rewrite_list()
advagg_relocate_advagg_get_info_on_files_alter in advagg_relocate/advagg_relocate.advagg.inc
Implements hook_advagg_get_info_on_files_alter().
advagg_relocate_advagg_get_js_file_contents_alter in advagg_relocate/advagg_relocate.advagg.inc
Implements hook_advagg_get_js_file_contents_alter().
advagg_relocate_js_post_alter in advagg_relocate/advagg_relocate.module
Alter the js array.

File

advagg_relocate/advagg_relocate.module, line 421
Advanced aggregation relocate module.

Code

function advagg_relocate_js_script_rewrite_list($key, array $value, array $aggregate_settings) {
  $scripts_found = array();

  // Handle analytics.js.
  if (!empty($aggregate_settings['variables']['advagg_relocate_js_ga_local'])) {
    $start = strpos($value['data'], '(function(i,s,o,g,r,a,m){i["GoogleAnalyticsObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date()');
    $middle = strpos($value['data'], '})(window,document,"script",', $start);
    $end = strpos($value['data'], ',"ga");ga("create",', $middle);

    // Found the GA code.
    if ($start !== FALSE && $middle !== FALSE && $end !== FALSE) {
      $scripts_found['analytics.js'] = array(
        $key,
        $start,
        $middle,
        $end,
      );
    }
  }

  // Handle piwik.js.
  if (!empty($aggregate_settings['variables']['advagg_relocate_js_piwik_local'])) {
    $start = strpos($value['data'], 'var _paq');
    $middle = strpos($value['data'], '_paq.push(["setTrackerUrl"', $start);

    // Skip if not the paq code.
    if ($start !== FALSE && $middle !== FALSE) {
      $scripts_found['piwik.js'] = array(
        $key,
        $start,
        $middle,
      );
    }
  }

  // Handle gtm.js.
  if (!empty($aggregate_settings['variables']['advagg_relocate_js_gtm_local'])) {
    $start = strpos($value['data'], '(function(w,d,s,l,i){');
    $middle = strpos($value['data'], 'var f=d.getElementsByTagName(s)[0]', $start);
    $end = strpos($value['data'], '})(window,document,', $middle);

    // Skip if not the GTM code.
    if ($start !== FALSE && $middle !== FALSE && $end !== FALSE) {
      $scripts_found['gtm.js'] = array(
        $key,
        $start,
        $middle,
        $end,
      );
    }
  }

  // Handle fbds.js.
  if (!empty($aggregate_settings['variables']['advagg_relocate_js_fbds_local'])) {
    $start = strpos($value['data'], 'var _fbq');
    $middle = strpos($value['data'], '(!_fbq.loaded)', $start);
    $end = strpos($value['data'], 's.parentNode.insertBefore(fbds', $middle);

    // Skip if not the fbds code.
    if ($start !== FALSE && $middle !== FALSE && $end !== FALSE) {
      $scripts_found['fbds.js'] = array(
        $key,
        $start,
        $middle,
        $end,
      );
    }
  }

  // Handle fbevents.js.
  if (!empty($aggregate_settings['variables']['advagg_relocate_js_fbevents_local'])) {
    $end = strpos($value['data'], 'connect.facebook.net/en_US/fbevents.js');

    // Skip if not the fbevents code.
    if ($end !== FALSE) {

      // Get middle of string.
      $matches = array();
      preg_match('/fbq\\s*=\\s*function\\(\\)/', $value['data'], $matches, PREG_OFFSET_CAPTURE);
      if (!empty($matches[0][1])) {
        $middle = $matches[0][1];

        // Get start of string.
        $matches = array();
        preg_match('/\\!\\s*function\\(f,b,e,v,n,t,s\\)/', $value['data'], $matches, PREG_OFFSET_CAPTURE);
        if (isset($matches[0][1])) {
          $start = $matches[0][1];
          if ($middle - $start <= 90) {
            $scripts_found['fbevents.js'] = array(
              $key,
              $start,
              $middle,
              $end,
            );
          }
        }
      }
    }
  }

  // Handle perfectaudience.js.
  if (!empty($aggregate_settings['variables']['advagg_relocate_js_perfectaudience_local'])) {
    $matches = array();
    preg_match('/window\\._pa\\s*=\\s*window._pa\\s*\\|\\|\\s*\\{\\s*\\}\\s*;/', $value['data'], $matches, PREG_OFFSET_CAPTURE);
    if (!empty($matches[0][1])) {
      $start = $matches[0][1];
      $middle = strpos($value['data'], '//tag.perfectaudience.com/serve/', $start);
      $end = strpos($value['data'], 's.parentNode.insertBefore(pa, s);', $middle);

      // Add if perfectaudience code.
      if ($start !== FALSE && $middle !== FALSE && $end !== FALSE) {
        $scripts_found['perfectaudience.js'] = array(
          $key,
          $start,
          $middle,
          $end,
        );
      }
    }

    // Handle twitter uwt.js.
    if (!empty($aggregate_settings['variables']['advagg_relocate_js_twitter_uwt_local'])) {
      $start = strpos($value['data'], '!function(e,t,n,s,u,a){e.twq||');
      $middle = strpos($value['data'], '//static.ads-twitter.com/uwt.js', $start);
      $end = strpos($value['data'], "a.parentNode.insertBefore(u,a))}(window,document,'script');", $middle);

      // Add in twitter uwt.js code.
      if ($start !== FALSE && $middle !== FALSE && $end !== FALSE) {
        $scripts_found['uwt.js'] = array(
          $key,
          $start,
          $middle,
          $end,
        );
      }
    }

    // Handle linkedin insight.js.
    if (!empty($aggregate_settings['variables']['advagg_relocate_js_linkedin_insight_local'])) {
      $start = strpos($value['data'], '_linkedin_data_partner_id');
      $middle = strpos($value['data'], '//snap.licdn.com/li.lms-analytics/insight.min.js', $start);
      $end = strpos($value['data'], "s.parentNode.insertBefore(b, s)", $middle);

      // Add in linkedin insight.js code.
      if ($start !== FALSE && $middle !== FALSE && $end !== FALSE) {
        $scripts_found['linkedin_insight.js'] = array(
          $key,
          $start,
          $middle,
          $end,
        );
      }
    }
  }
  return $scripts_found;
}