You are here

function async_js_js_alter in Asynchronous JavaScript 8

Same name and namespace in other branches
  1. 7 async_js.module \async_js_js_alter()

Implements hook_js_alter().

See also

async_js_add_js()

File

./async_js.module, line 62
Queue JavaScript files to be loaded asynchronously.

Code

function async_js_js_alter(&$javascript) {

  // Add any scripts to be loaded asynchronously.
  foreach ($javascript as $key => $script) {
    if (!empty($script['async_js'])) {
      async_js_add_js($script['data'], $script);
      unset($javascript[$key]);
    }
  }

  // Retrieve all scripts to be loaded asynchronously.
  $async_js = async_js_add_js();
  if (!empty($async_js)) {

    // Process dependencies.
    $async_js = _async_js_process_dependencies($async_js);

    // Build file URLs.
    $async_js = _async_js_build_urls($async_js);

    // Initialize settings array.
    $settings = array();
    $javascript['settings']['data'][]['async_js'] =& $settings;

    // Add settings for each script.
    foreach ($async_js as $script) {

      // Prep $script for JavaScript.
      $script = array(
        'data' => $script['data'],
        // Use an array of callbacks, even if only given a string.
        'callbacks' => (array) $script['async_callback'],
        'fade' => $script['async_fade'],
        'container' => $script['async_container'],
        'dependencies' => $script['async_dependencies'],
        'dependents' => $script['async_dependents'],
        'queued' => FALSE,
        'loaded' => FALSE,
      );

      // Add file to script list.
      $settings['javascript'][$script['data']] = $script;
    }

    // Add additional settings.
    $settings['timeout'] = variable_get('async_js_timeout', 1000);
    $settings['finalCallback'] = variable_get('async_js_final_callback', '');

    // Add our own script.
    $data = drupal_get_path('module', 'async_js') . '/async_js.js';
    $javascript[$data] = drupal_js_defaults($data);
  }
}