' . t('Configure how jQuery behaves on the site. Select which jQuery version, the compression level and whether or not to use a CDN.', array( '@jquery' => 'http://jquery.com', )) . '
'; } } /** * Implements hook_library(). */ function jquery_update_library() { // Register libraries available in the external directory. $path = drupal_get_path('module', 'jquery_update') . '/ui/external'; $libraries['qunit'] = array( 'title' => 'QUnit', 'js' => array( $path . '/qunit.js' => array( 'group' => JS_LIBRARY, 'weight' => 2, ), ), 'css' => array( $path . '/qunit.css' => array(), ), 'version' => '1.11.0', ); $libraries['jquery_update.ajax.fix'] = array( 'title' => 'jQuery Update Version Fix', 'js' => array( drupal_get_path('module', 'jquery_update') . '/js/jquery_update.js' => array( 'group' => JS_LIBRARY, 'weight' => 3, ), ), 'version' => '0.0.1', ); $libraries['jquery.metadata'] = array( 'title' => 'QUnit', 'js' => array( $path . '/jquery.metadata.js' => array( 'group' => JS_LIBRARY, 'weight' => 2, ), ), 'version' => '4187', ); $libraries['jquery.bgiframe'] = array( 'title' => 'bgiframe', 'website' => 'http://docs.jquery.com/Plugins/bgiframe', 'js' => array( $path . '/jquery.bgiframe.js' => array( 'group' => JS_LIBRARY, 'weight' => 2, ), ), 'version' => '2.1.2', ); return $libraries; } /** * Implements hook_library_alter(). */ function jquery_update_library_alter(&$javascript, $module) { $path = drupal_get_path('module', 'jquery_update'); $version = variable_get('jquery_update_jquery_version', '1.10'); // Modified System Library. if ($module === 'system') { // Make sure we inject either the minified or uncompressed version as desired. $min = variable_get('jquery_update_compression_type', 'min') == 'none' ? '' : '.min'; $cdn = variable_get('jquery_update_jquery_cdn', 'none'); // Replace jQuery with the alternative version. $admin_version = variable_get('jquery_update_jquery_admin_version', ''); if (!empty($admin_version) && path_is_admin(current_path())) { if (version_compare($version, $admin_version, '!=')) { $version = $admin_version; } } // If the ajax version is set then that one always win. if (!empty($_POST['ajax_page_state']['jquery_version'])) { $ajax_version = $_POST['ajax_page_state']['jquery_version']; if (in_array($ajax_version, array('default', '1.5', '1.6', '1.7', '1.8', '1.9', '1.10'))) { $version = $ajax_version; } } // Always add a new jquery_version array to ajaxPageState. // This is what we used to determine which version to use // for any ajax callback. $javascript['drupal.ajax']['js'][] = array( 'data' => array('ajaxPageState' => array('jquery_version' => $version)), 'type' => 'setting', ); $javascript['drupal.ajax']['dependencies'][] = array('jquery_update', 'jquery_update.ajax.fix'); // Don't replace anything if Drupal provided jQuery should be used if ('default' == $version) { return; } jquery_update_jquery_replace($javascript, $cdn, $path, $min, $version); // Replace jQuery UI with CDN or local files. If from a CDN include all of // jQuery UI. if (version_compare($version, '1.6', '>=')) { jquery_update_jqueryui_replace($javascript, $cdn, $path, $min); } // Replace the jQuery Cookie plugin. $javascript['cookie']['js']['misc/jquery.cookie.js']['data'] = $path . '/replace/ui/external/jquery.cookie.js'; // Noting the version based on git commit as no version number is available. $javascript['cookie']['version'] = '67fb34f6a866c40d0570'; // Replace jQuery Form plugin. $javascript['jquery.form']['js']['misc/jquery.form.js']['data'] = $path . '/replace/misc/jquery.form' . $min . '.js'; $javascript['jquery.form']['version'] = '2.69'; // Replace files for Jquery 1.9 and up if (version_compare($version, '1.9', '>=')) { $javascript['jquery.bbq']['js']['misc/jquery.ba-bbq.js']['data'] = $path . '/replace/misc/1.9/jquery.ba-bbq' . $min . '.js'; } } if ($module == 'overlay') { if (version_compare($version, '1.9', '>=')) { $javascript['parent']['js']['modules/overlay/overlay-parent.js']['data'] = $path . '/replace/misc/1.9/overlay-parent.js'; } } } /** * Implements hook_menu(). */ function jquery_update_menu() { $items['admin/config/development/jquery_update'] = array( 'title' => 'jQuery update', 'description' => 'Configure settings related to the jQuery upgrade, the library path and compression.', 'page callback' => 'drupal_get_form', 'page arguments' => array('jquery_update_settings_form'), 'access arguments' => array('administer site configuration'), ); return $items; } /** * Admin settings menu callback. * * @see jquery_update_menu() */ function jquery_update_settings_form() { $form['version_options'] = array( '#type' => 'fieldset', '#title' => t('Version options'), ); $form['version_options']['jquery_update_jquery_version'] = array( '#type' => 'select', '#title' => t('Default jQuery Version'), '#options' => array( 'default' => t('Default (provided by Drupal)'), '1.5' => '1.5', '1.7' => '1.7', '1.8' => '1.8', '1.9' => '1.9', '1.10' => '1.10', ), '#default_value' => variable_get('jquery_update_jquery_version', '1.10'), '#description' => t('Select which jQuery version to use by default.'), ); $form['version_options']['jquery_update_jquery_admin_version'] = array( '#type' => 'select', '#title' => t('Alternate jQuery version for administrative pages'), '#options' => array( '' => t('Default jQuery Version'), 'default' => t('Default (provided by Drupal)'), '1.5' => '1.5', '1.7' => '1.7', '1.8' => '1.8', '1.10' => '1.10', ), '#default_value' => variable_get('jquery_update_jquery_admin_version', ''), '#description' => t('Optionally select a different version of jQuery to use on administrative pages.'), ); $form['jquery_update_compression_type'] = array( '#type' => 'radios', '#title' => t('jQuery compression level'), '#options' => array( 'min' => t('Production (minified)'), 'none' => t('Development (uncompressed)'), ), // Do not show this field if jQuery version is default '#states' => array( 'invisible' => array( ':input[name=jquery_update_jquery_version]' => array('value' => "default"), ), ), '#default_value' => variable_get('jquery_update_compression_type', 'min'), ); $form['jquery_update_jquery_cdn'] = array( '#type' => 'select', '#title' => t('jQuery and jQuery UI CDN'), '#options' => array( 'none' => t('None'), 'google' => t('Google'), 'microsoft' => t('Microsoft'), 'jquery' => t('jQuery'), ), // Do not show this field if jQuery version is default '#states' => array( 'invisible' => array( ':input[name=jquery_update_jquery_version]' => array('value' => "default"), ), ), '#default_value' => variable_get('jquery_update_jquery_cdn', 'none'), '#description' => t('Use jQuery and jQuery UI from a CDN. If the CDN is not available the local version of jQuery and jQuery UI will be used.'), ); return system_settings_form($form); } /** * Update jQuery to the CDN or local path. * * @param array $javascript * The library definition array as seen in hook_library_alter(). * @param string $cdn * The name of the CDN option to use. Possible options are: * - none * - google * - microsoft * @param string $path * The path to the module where replacements can be found. * @param string $min * The '.min' to include in the file name if we are requesting a minified * version. * @param string $version * The version of jQuery to use. */ function jquery_update_jquery_replace(&$javascript, $cdn, $path, $min, $version) { // Make sure to use the latest version in given branch. $trueversion = NULL; switch ($version) { case '1.5': $trueversion = '1.5.2'; break; case '1.7': $trueversion = '1.7.2'; break; case '1.8': $trueversion = '1.8.3'; break; case '1.9': $trueversion = '1.9.1'; break; case '1.10': $trueversion = '1.10.2'; break; } $javascript['jquery']['version'] = $trueversion; // Check for CDN support. switch ($cdn) { case 'google': $javascript['jquery']['js']['misc/jquery.js']['data'] = '//ajax.googleapis.com/ajax/libs/jquery/' . $trueversion . '/jquery' . $min . '.js'; $javascript['jquery']['js']['misc/jquery.js']['type'] = 'external'; jquery_update_jquery_backup($javascript, $path, $min, $version); break; case 'microsoft': $javascript['jquery']['js']['misc/jquery.js']['data'] = '//ajax.aspnetcdn.com/ajax/jQuery/jquery-' . $trueversion . $min . '.js'; $javascript['jquery']['js']['misc/jquery.js']['type'] = 'external'; jquery_update_jquery_backup($javascript, $path, $min, $version); break; case 'jquery': $javascript['jquery']['js']['misc/jquery.js']['data'] = '//code.jquery.com/jquery-' . $trueversion . $min . '.js'; $javascript['jquery']['js']['misc/jquery.js']['type'] = 'external'; jquery_update_jquery_backup($javascript, $path, $min, $version); break; case 'none': default: $javascript['jquery']['js']['misc/jquery.js']['data'] = $path . '/replace/jquery/' . $version . '/jquery' . $min . '.js'; break; } } /** * Add the local fallback in case jQuery from the CDN is unavailable. * * @param array $javascript * The $libraries array as seen in hook_library_alter() * @param string $path * The path to the module where replacements can be found. * @param string $min * The '.min' to include in the file name if we are requesting a minified * version. * @param string $version * The verison of jQuery to use. */ function jquery_update_jquery_backup(&$javascript, $path, $min, $version) { $javascript['jquery']['js'][] = array( 'data' => 'window.jQuery || document.write("