summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2008-11-23 16:00:08 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2008-11-23 16:00:08 +0000
commit1b4dd805ca9ebcf34815f480533a1069ba63b7e3 (patch)
treeb38a60a5fd251f5583b449c5ce180cb42024d3a7 /modules
parent25f63a896578c8e342acfe7eebcd4e21cf982349 (diff)
downloadbrdo-1b4dd805ca9ebcf34815f480533a1069ba63b7e3.tar.gz
brdo-1b4dd805ca9ebcf34815f480533a1069ba63b7e3.tar.bz2
#315801 by Rob Loach, Grugnoh2, mfer and dmitrig01: Add a hook_js_alter() to modify JavaScript being printed to the page.
Diffstat (limited to 'modules')
-rw-r--r--modules/locale/locale.module11
-rw-r--r--modules/simpletest/simpletest.module17
-rw-r--r--modules/simpletest/tests/common.test21
3 files changed, 37 insertions, 12 deletions
diff --git a/modules/locale/locale.module b/modules/locale/locale.module
index 15629d3b8..99fe894f3 100644
--- a/modules/locale/locale.module
+++ b/modules/locale/locale.module
@@ -505,21 +505,18 @@ function locale_system_update($components) {
}
/**
- * Update JavaScript translation file, if required, and add it to the page.
+ * Implementation of hook_js_alter().
*
* This function checks all JavaScript files currently added via drupal_add_js()
* and invokes parsing if they have not yet been parsed for Drupal.t()
* and Drupal.formatPlural() calls. Also refreshes the JavaScript translation
* file if necessary, and adds it to the page.
*/
-function locale_update_js_files() {
+function locale_js_alter(&$javascript) {
global $language;
$dir = file_create_path(variable_get('locale_js_directory', 'languages'));
$parsed = variable_get('javascript_parsed', array());
-
- // Get an array of all the JavaScript added so far.
- $javascript = drupal_add_js();
$files = $new_files = FALSE;
foreach ($javascript as $item) {
@@ -563,7 +560,9 @@ function locale_update_js_files() {
// Add the translation JavaScript file to the page.
if ($files && !empty($language->javascript)) {
- drupal_add_js($dir . '/' . $language->language . '_' . $language->javascript . '.js');
+ // Add the translation JavaScript file to the page.
+ $file = $dir . '/' . $language->language . '_' . $language->javascript . '.js';
+ $javascript[$file] = drupal_js_defaults($file);
}
}
diff --git a/modules/simpletest/simpletest.module b/modules/simpletest/simpletest.module
index 71225ff5c..9d1431065 100644
--- a/modules/simpletest/simpletest.module
+++ b/modules/simpletest/simpletest.module
@@ -210,10 +210,7 @@ function simpletest_test_form() {
function theme_simpletest_test_table($table) {
drupal_add_css(drupal_get_path('module', 'simpletest') . '/simpletest.css');
-
- // Since SimpleTest is a special use case for the table select, stick the
- // SimpleTest JavaScript above the table select.
- drupal_add_js(drupal_get_path('module', 'simpletest') . '/simpletest.js', array('weight' => JS_DEFAULT - 1));
+ drupal_add_js(drupal_get_path('module', 'simpletest') . '/simpletest.js');
// Create header for test selection table.
$header = array(
@@ -301,6 +298,18 @@ function theme_simpletest_test_table($table) {
}
}
+/**
+ * Implementation of hook_js_alter().
+ */
+function simpletest_js_alter(&$javascript) {
+ // Since SimpleTest is a special use case for the table select, stick the
+ // SimpleTest JavaScript above the table select.
+ $simpletest = drupal_get_path('module', 'simpletest') . '/simpletest.js';
+ if (array_key_exists($simpletest, $javascript) && array_key_exists('misc/tableselect.js', $javascript)) {
+ $javascript[$simpletest]['weight'] = $javascript['misc/tableselect.js']['weight'] - 1;
+ }
+}
+
function theme_simpletest_result_summary($form, $text = NULL) {
return '<div class="simpletest-'. ($form['#ok'] ? 'pass' : 'fail') .'">' . _simpletest_format_summary_line($form) . '</div>';
}
diff --git a/modules/simpletest/tests/common.test b/modules/simpletest/tests/common.test
index 01fe73546..ec04641e1 100644
--- a/modules/simpletest/tests/common.test
+++ b/modules/simpletest/tests/common.test
@@ -376,8 +376,8 @@ class JavaScriptTestCase extends DrupalWebTestCase {
* Implementation of setUp().
*/
function setUp() {
- // Enable locale in test environment.
- parent::setUp('locale');
+ // Enable Locale and SimpleTest in the test environment.
+ parent::setUp('locale', 'simpletest');
// Disable preprocessing
$this->preprocess_js = variable_get('preprocess_js', 0);
@@ -488,6 +488,23 @@ class JavaScriptTestCase extends DrupalWebTestCase {
$javascript = drupal_get_js();
$this->assertTrue(strpos($javascript, 'misc/collapse.js') < strpos($javascript, 'misc/jquery.js'), t('Rendering a JavaScript file above jQuery.'));
}
+
+ /**
+ * Test altering a JavaScript's weight via hook_js_alter().
+ *
+ * @see simpletest_js_alter()
+ */
+ function testAlter() {
+ // Add both tableselect.js and simpletest.js, with a larger weight on SimpleTest.
+ drupal_add_js('misc/tableselect.js');
+ drupal_add_js(drupal_get_path('module', 'simpletest') . '/simpletest.js', array('weight' => JS_THEME));
+
+ // Render the JavaScript, testing if simpletest.js was altered to be before
+ // tableselect.js. See simpletest_js_alter() to see where this alteration
+ // takes place.
+ $javascript = drupal_get_js();
+ $this->assertTrue(strpos($javascript, 'simpletest.js') < strpos($javascript, 'misc/tableselect.js'), t('Altering JavaScript weight through the alter hook.'));
+ }
}
/**