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

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;
}