Index: includes/common.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/common.inc,v
retrieving revision 1.823
diff -u -r1.823 common.inc
--- includes/common.inc 10 Nov 2008 05:22:59 -0000 1.823
+++ includes/common.inc 11 Nov 2008 18:41:10 -0000
@@ -2110,6 +2110,9 @@
* a new message arrived, by opening a pop up, alert box etc. This should only
* be used for JavaScript which cannot be placed and executed from a file.
*
+ * - Add an external JavaScript resource ('external'):
+ * Adds a reference to an external Javascript file on the page.
+ *
* - Add settings ('setting'):
* Adds a setting to Drupal's global storage of JavaScript settings. Per-page
* settings are required by some modules to function properly. All settings
@@ -2119,6 +2122,7 @@
* @code
* drupal_add_js('misc/collapse.js');
* drupal_add_js('misc/collapse.js', 'file');
+ * drupal_add_js('http://yui.yahooapis.com/2.6.0/build/utilities/utilities.js', 'external');
* drupal_add_js('$(document).ready(function(){alert("Hello!");});', 'inline');
* drupal_add_js('$(document).ready(function(){alert("Hello!");});',
* array('type' => 'inline', 'scope' => 'footer', 'weight' => 5)
@@ -2129,6 +2133,7 @@
* (optional) If given, the value depends on the $options parameter:
* - 'file': Path to the file relative to base_path().
* - 'inline': The JavaScript code that should be placed in the given scope.
+ * - 'external': The absolute URL of a JavaScript resource.
* - 'setting': An array with configuration options as associative array. The
* array is directly placed in Drupal.settings. All modules should wrap
* their actual configuration settings in another variable to prevent
@@ -2140,7 +2145,8 @@
* always pass the string 'setting' only.
* - type
* The type of JavaScript that is to be added to the page. Allowed
- * values are 'file', 'inline' or 'setting'. Defaults to 'file'.
+ * values are 'file', 'inline', 'external' or 'setting'. Defaults to
+ * 'file'.
* - scope
* The location in which you want to place the script. Possible values
* are 'header' or 'footer'. If your theme implements different regions,
@@ -2253,11 +2259,10 @@
$javascript[] = $options;
break;
- case 'file':
+ default:
// Files must keep their name as the associative key so the same
// JavaScript files can not be added twice.
$javascript[$options['data']] = $options;
- break;
}
}
return $javascript;
@@ -2336,7 +2341,11 @@
$output .= '\n";
break;
- case 'file':
+ case 'external':
+ $no_preprocess .= '\n";
+ break;
+
+ case 'file':
if (!$item['preprocess'] || !$is_writable || !$preprocess_js) {
$no_preprocess .= '\n";
}
Index: modules/simpletest/tests/common.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/common.test,v
retrieving revision 1.12
diff -u -r1.12 common.test
--- modules/simpletest/tests/common.test 10 Nov 2008 05:23:00 -0000 1.12
+++ modules/simpletest/tests/common.test 11 Nov 2008 18:41:10 -0000
@@ -405,6 +405,26 @@
}
/**
+ * Test adding an external script.
+ */
+ function testAddExternal() {
+ $external = 'http://yui.yahooapis.com/2.6.0/build/utilities/utilities.js';
+ $javascript = drupal_add_js($external, 'external');
+ $data = end($javascript);
+ $this->assertEqual($external, $data['data'], t('External JavaScript is cached correctly.'));
+ }
+
+ /**
+ * Test rendering an external script.
+ */
+ function testRenderExternal() {
+ $external = 'http://yui.yahooapis.com/2.6.0/build/utilities/utilities.js';
+ drupal_add_js($external, 'external');
+ $javascript = drupal_get_js();
+ $this->assertTrue(strpos($javascript, $external) > 0, t('External JavaScript is rendered correctly.'));
+ }
+
+ /**
* Test drupal_get_js() with a footer scope.
*/
function testFooterHTML() {