? sites/all/modules
? sites/default/files
? sites/default/settings.php
Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.282
diff -u -d -F^\s*function -r1.282 form.inc
--- includes/form.inc	6 Sep 2008 08:36:19 -0000	1.282
+++ includes/form.inc	8 Sep 2008 13:30:56 -0000
@@ -2123,6 +2123,17 @@ function form_process_weight($element) {
 }
 
 /**
+ * Process function for adding autofocus to a field.
+ */
+function form_process_autofocus($element) {
+  if (!empty($element['#autofocus'])) {
+    drupal_add_js('misc/autofocus.js');
+    drupal_add_js(array('autofocus' => $element['#id']), 'setting');
+  }
+  return $element;
+}
+
+/**
  * Format a file upload field.
  *
  * @param $title
Index: includes/locale.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/locale.inc,v
retrieving revision 1.180
diff -u -d -F^\s*function -r1.180 locale.inc
--- includes/locale.inc	21 Aug 2008 19:36:36 -0000	1.180
+++ includes/locale.inc	8 Sep 2008 13:30:57 -0000
@@ -552,6 +552,7 @@ function locale_translate_seek_form() {
     '#title' => t('String contains'),
     '#default_value' => @$query['string'],
     '#description' => t('Leave blank to show all strings. The search is case sensitive.'),
+    '#autofocus' => TRUE,
   );
   $form['search']['language'] = array(
     // Change type of form widget if more the 5 options will
@@ -814,6 +815,7 @@ function locale_translate_edit_form(&$fo
       '#title' => t($language->name),
       '#rows' => $rows,
       '#default_value' => '',
+      '#autofocus' => TRUE,
     );
   }
 
Index: misc/autofocus.js
===================================================================
RCS file: misc/autofocus.js
diff -N misc/autofocus.js
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ misc/autofocus.js	8 Sep 2008 13:30:57 -0000
@@ -0,0 +1,15 @@
+// $Id$
+
+/**
+ * Focuses a field on page load
+ */
+
+$(function() {
+  if (Drupal.settings && Drupal.settings.autofocus) {
+    var field = $('#'+ Drupal.settings.autofocus);
+    if (field[0]) {
+      field[0].focus();
+      field[0].select();
+    }
+  }
+});
Index: modules/aggregator/aggregator.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/aggregator/aggregator.admin.inc,v
retrieving revision 1.15
diff -u -d -F^\s*function -r1.15 aggregator.admin.inc
--- modules/aggregator/aggregator.admin.inc	6 Sep 2008 08:36:19 -0000	1.15
+++ modules/aggregator/aggregator.admin.inc	8 Sep 2008 13:30:57 -0000
@@ -65,6 +65,7 @@ function aggregator_form_feed(&$form_sta
     '#maxlength' => 255,
     '#description' => t('The name of the feed (or the name of the website providing the feed).'),
     '#required' => TRUE,
+    '#autofocus' => TRUE,
   );
   $form['url'] = array('#type' => 'textfield',
     '#title' => t('URL'),
@@ -436,6 +437,7 @@ function aggregator_form_category(&$form
     '#default_value' => $edit['title'],
     '#maxlength' => 64,
     '#required' => TRUE,
+    '#autofocus' => TRUE,
   );
   $form['description'] = array('#type' => 'textarea',
     '#title' => t('Description'),
Index: modules/block/block.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/block/block.module,v
retrieving revision 1.309
diff -u -d -F^\s*function -r1.309 block.module
--- modules/block/block.module	21 Aug 2008 19:36:36 -0000	1.309
+++ modules/block/block.module	8 Sep 2008 13:30:58 -0000
@@ -309,6 +309,7 @@ function block_box_form($edit = array())
     '#description' => t('A brief description of your block. Used on the <a href="@overview">block overview page</a>.', array('@overview' => url('admin/build/block'))),
     '#required' => TRUE,
     '#weight' => -19,
+    '#autofocus' => empty($edit['info']),
   );
   $form['body_field']['#weight'] = -17;
   $form['body_field']['body'] = array(
Index: modules/contact/contact.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/contact/contact.admin.inc,v
retrieving revision 1.5
diff -u -d -F^\s*function -r1.5 contact.admin.inc
--- modules/contact/contact.admin.inc	2 Jul 2008 20:05:11 -0000	1.5
+++ modules/contact/contact.admin.inc	8 Sep 2008 13:30:58 -0000
@@ -42,6 +42,7 @@ function contact_admin_edit($form_state 
     '#default_value' => $contact['category'],
     '#description' => t("Example: 'website feedback' or 'product information'."),
     '#required' => TRUE,
+    '#autofocus' => TRUE,
   );
   $form['recipients'] = array('#type' => 'textarea',
     '#title' => t('Recipients'),
Index: modules/contact/contact.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/contact/contact.pages.inc,v
retrieving revision 1.11
diff -u -d -F^\s*function -r1.11 contact.pages.inc
--- modules/contact/contact.pages.inc	16 Jul 2008 21:59:26 -0000	1.11
+++ modules/contact/contact.pages.inc	8 Sep 2008 13:30:58 -0000
@@ -187,6 +187,7 @@ function contact_mail_user(&$form_state,
     '#title' => t('Subject'),
     '#maxlength' => 50,
     '#required' => TRUE,
+    '#autofocus' => TRUE,
   );
   $form['message'] = array('#type' => 'textarea',
     '#title' => t('Message'),
Index: modules/filter/filter.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.admin.inc,v
retrieving revision 1.13
diff -u -d -F^\s*function -r1.13 filter.admin.inc
--- modules/filter/filter.admin.inc	24 Jul 2008 16:27:51 -0000	1.13
+++ modules/filter/filter.admin.inc	8 Sep 2008 13:30:58 -0000
@@ -119,6 +119,7 @@ function filter_admin_format_form(&$form
     '#default_value' => $format->name,
     '#description' => t('Specify a unique name for this filter format.'),
     '#required' => TRUE,
+    '#autofocus' => TRUE,
   );
 
   // Add a row of checkboxes for form group.
Index: modules/forum/forum.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/forum/forum.admin.inc,v
retrieving revision 1.12
diff -u -d -F^\s*function -r1.12 forum.admin.inc
--- modules/forum/forum.admin.inc	16 Jul 2008 21:59:26 -0000	1.12
+++ modules/forum/forum.admin.inc	8 Sep 2008 13:30:58 -0000
@@ -40,6 +40,7 @@ function forum_form_forum(&$form_state, 
     '#maxlength' => 255,
     '#description' => t('Short but meaningful name for this collection of threaded discussions.'),
     '#required' => TRUE,
+    '#autofocus' => TRUE,
   );
   $form['description'] = array('#type' => 'textarea',
     '#title' => t('Description'),
@@ -118,7 +119,8 @@ function forum_form_container(&$form_sta
     '#default_value' => $edit['name'],
     '#maxlength' => 255,
     '#description' => t('Short but meaningful name for this collection of related forums.'),
-    '#required' => TRUE
+    '#required' => TRUE,
+    '#autofocus' => TRUE,
   );
 
   $form['description'] = array(
Index: modules/menu/menu.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/menu/menu.admin.inc,v
retrieving revision 1.32
diff -u -d -F^\s*function -r1.32 menu.admin.inc
--- modules/menu/menu.admin.inc	16 Jul 2008 21:59:27 -0000	1.32
+++ modules/menu/menu.admin.inc	8 Sep 2008 13:30:59 -0000
@@ -259,6 +259,7 @@ function menu_edit_item(&$form_state, $t
       '#default_value' => $path,
       '#description' => t('The path this menu item links to. This can be an internal Drupal path such as %add-node or an external URL such as %drupal. Enter %front to link to the front page.', array('%front' => '<front>', '%add-node' => 'node/add', '%drupal' => 'http://drupal.org')),
       '#required' => TRUE,
+      '#autofocus' => empty($path),
     );
     $form['delete'] = array(
       '#type' => 'submit',
@@ -404,6 +405,7 @@ function menu_edit_menu(&$form_state, $t
       '#maxsize' => MENU_MAX_MENU_NAME_LENGTH_UI,
       '#description' => t('The machine-readable name of this menu. This text will be used for constructing the URL of the <em>menu overview</em> page for this menu. This name must contain only lowercase letters, numbers, and hyphens, and must be unique.'),
       '#required' => TRUE,
+      '#autofocus' => TRUE,
     );
     $form['#insert'] = TRUE;
   }
@@ -413,6 +415,7 @@ function menu_edit_menu(&$form_state, $t
     '#title' => t('Title'),
     '#default_value' => $menu['title'],
     '#required' => TRUE,
+    '#autofocus' => isset($form['menu_name']['#value']),
   );
   $form['description'] = array(
     '#type' => 'textarea',
Index: modules/node/content_types.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/content_types.inc,v
retrieving revision 1.57
diff -u -d -F^\s*function -r1.57 content_types.inc
--- modules/node/content_types.inc	16 Jul 2008 21:59:27 -0000	1.57
+++ modules/node/content_types.inc	8 Sep 2008 13:30:59 -0000
@@ -74,6 +74,7 @@ function node_type_form(&$form_state, $t
     '#default_value' => $type->name,
     '#description' => t('The human-readable name of this content type. This text will be displayed as part of the list on the <em>create content</em> page. It is recommended that this name begin with a capital letter and contain only letters, numbers, and <strong>spaces</strong>. This name must be unique.'),
     '#required' => TRUE,
+    '#autofocus' => empty($type->name),
   );
 
   if (!$type->locked) {
Index: modules/node/node.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.pages.inc,v
retrieving revision 1.35
diff -u -d -F^\s*function -r1.35 node.pages.inc
--- modules/node/node.pages.inc	6 Sep 2008 08:36:20 -0000	1.35
+++ modules/node/node.pages.inc	8 Sep 2008 13:30:59 -0000
@@ -138,8 +138,13 @@ function node_form(&$form_state, $node) 
   if ($extra = node_invoke($node, 'form', $form_state)) {
     $form = array_merge_recursive($form, $extra);
   }
-  if (!isset($form['title']['#weight'])) {
-    $form['title']['#weight'] = -5;
+  if (isset($form['title'])) {
+    if (!isset($node->nid) && !isset($form['title']['#autofocus'])) {
+      $form['title']['#autofocus'] = TRUE;
+    }
+    if (!isset($form['title']['#weight'])) {
+      $form['title']['#weight'] = -5;
+    }
   }
 
   $form['#node'] = $node;
Index: modules/openid/openid.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/openid/openid.pages.inc,v
retrieving revision 1.6
diff -u -d -F^\s*function -r1.6 openid.pages.inc
--- modules/openid/openid.pages.inc	14 Apr 2008 17:48:38 -0000	1.6
+++ modules/openid/openid.pages.inc	8 Sep 2008 13:30:59 -0000
@@ -62,6 +62,7 @@ function openid_user_add() {
   $form['openid_identifier'] = array(
     '#type' => 'textfield',
     '#title' => t('OpenID'),
+    '#autofocus' => TRUE,
   );
   $form['submit'] = array('#type' => 'submit', '#value' => t('Add an OpenID'));
   return $form;
Index: modules/path/path.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/path/path.admin.inc,v
retrieving revision 1.10
diff -u -d -F^\s*function -r1.10 path.admin.inc
--- modules/path/path.admin.inc	21 Aug 2008 19:36:37 -0000	1.10
+++ modules/path/path.admin.inc	8 Sep 2008 13:30:59 -0000
@@ -99,6 +99,7 @@ function path_admin_form(&$form_state, $
     '#description' => t('Specify the existing path you wish to alias. For example: node/28, forum/1, taxonomy/term/1+2.'),
     '#field_prefix' => url(NULL, array('absolute' => TRUE)) . (variable_get('clean_url', 0) ? '' : '?q='),
     '#required' => TRUE,
+    '#autofocus' => empty($edit['src']),
   );
   $form['dst'] = array(
     '#type' => 'textfield',
@@ -202,6 +203,7 @@ function path_admin_filter_form(&$form_s
     '#default_value' => $keys,
     '#maxlength' => 64,
     '#size' => 25,
+    '#autofocus' => TRUE,
   );
   $form['basic']['inline']['submit'] = array(
     '#type' => 'submit',
Index: modules/profile/profile.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/profile/profile.admin.inc,v
retrieving revision 1.12
diff -u -d -F^\s*function -r1.12 profile.admin.inc
--- modules/profile/profile.admin.inc	21 Aug 2008 19:36:38 -0000	1.12
+++ modules/profile/profile.admin.inc	8 Sep 2008 13:31:00 -0000
@@ -216,6 +216,7 @@ function profile_field_form(&$form_state
     '#autocomplete_path' => 'admin/user/profile/autocomplete',
     '#description' => t('The category the new field should be part of. Categories are used to group fields logically. An example category is "Personal information".'),
     '#required' => TRUE,
+    '#autofocus' => empty($edit['category']),
   );
   $form['fields']['title'] = array('#type' => 'textfield',
     '#title' => t('Title'),
Index: modules/system/system.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v
retrieving revision 1.87
diff -u -d -F^\s*function -r1.87 system.admin.inc
--- modules/system/system.admin.inc	6 Sep 2008 08:36:21 -0000	1.87
+++ modules/system/system.admin.inc	8 Sep 2008 13:31:01 -0000
@@ -1141,6 +1141,7 @@ function system_ip_blocking_form($form_s
     '#maxlength' => 32,
     '#default_value' => arg(3),
     '#description' => t('Enter a valid IP address.'),
+    '#autofocus' => TRUE,
   );
   $form['submit'] = array(
     '#type' => 'submit',
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.617
diff -u -d -F^\s*function -r1.617 system.module
--- modules/system/system.module	6 Sep 2008 08:36:21 -0000	1.617
+++ modules/system/system.module	8 Sep 2008 13:31:03 -0000
@@ -219,7 +219,7 @@ function system_elements() {
     '#size' => 60,
     '#maxlength' => 128,
     '#autocomplete_path' => FALSE,
-    '#process' => array('form_process_ahah'),
+    '#process' => array('form_process_ahah', 'form_process_autofocus'),
   );
 
   $type['password'] = array(
@@ -239,7 +239,7 @@ function system_elements() {
     '#cols' => 60,
     '#rows' => 5,
     '#resizable' => TRUE,
-    '#process' => array('form_process_ahah'),
+    '#process' => array('form_process_ahah', 'form_process_autofocus'),
   );
 
   $type['radios'] = array(
Index: modules/taxonomy/taxonomy.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.admin.inc,v
retrieving revision 1.27
diff -u -d -F^\s*function -r1.27 taxonomy.admin.inc
--- modules/taxonomy/taxonomy.admin.inc	16 Jul 2008 21:59:28 -0000	1.27
+++ modules/taxonomy/taxonomy.admin.inc	8 Sep 2008 13:31:03 -0000
@@ -128,6 +128,7 @@ function taxonomy_form_vocabulary(&$form
     '#maxlength' => 255,
     '#description' => t('The name for this vocabulary, e.g., <em>"Tags"</em>.'),
     '#required' => TRUE,
+    '#autofocus' => TRUE,
   );
   $form['identification']['description'] = array('#type' => 'textarea',
     '#title' => t('Description'),
@@ -671,7 +672,9 @@ function taxonomy_form_term(&$form_state
     '#default_value' => $edit['name'],
     '#maxlength' => 255,
     '#description' => t('The name of this term.'),
-    '#required' => TRUE);
+    '#required' => TRUE,
+    '#autofocus' => TRUE,
+  );
   $form['identification']['description'] = array(
     '#type' => 'textarea',
     '#title' => t('Description'),
Index: modules/user/user.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.admin.inc,v
retrieving revision 1.25
diff -u -d -F^\s*function -r1.25 user.admin.inc
--- modules/user/user.admin.inc	6 Sep 2008 08:36:22 -0000	1.25
+++ modules/user/user.admin.inc	8 Sep 2008 13:31:03 -0000
@@ -635,6 +635,7 @@ function user_admin_role() {
       '#required' => TRUE,
       '#maxlength' => 64,
       '#description' => t('The name for this role. Example: "moderator", "editorial board", "site architect".'),
+      '#autofocus' => TRUE,
     );
     $form['rid'] = array(
       '#type' => 'value',
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.918
diff -u -d -F^\s*function -r1.918 user.module
--- modules/user/user.module	6 Sep 2008 08:36:22 -0000	1.918
+++ modules/user/user.module	8 Sep 2008 13:31:04 -0000
@@ -1225,6 +1225,7 @@ function user_login(&$form_state) {
     '#maxlength' => USERNAME_MAX_LENGTH,
     '#required' => TRUE,
     '#attributes' => array('tabindex' => '1'),
+    '#autofocus' => TRUE,
   );
 
   $form['name']['#description'] = t('Enter your @s username.', array('@s' => variable_get('site_name', 'Drupal')));
@@ -2355,6 +2356,9 @@ function user_register() {
     $form['destination'] = array('#type' => 'hidden', '#value' => $_GET['q']);
   }
 
+  // Automatically focus the user name field.
+  $form['account']['name']['#autofocus'] = TRUE;
+
   // Create a dummy variable for pass-by-reference parameters.
   $null = NULL;
   $extra = _user_forms($null, NULL, NULL, 'register');
Index: modules/user/user.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.pages.inc,v
retrieving revision 1.16
diff -u -d -F^\s*function -r1.16 user.pages.inc
--- modules/user/user.pages.inc	6 Sep 2008 08:36:22 -0000	1.16
+++ modules/user/user.pages.inc	8 Sep 2008 13:31:04 -0000
@@ -35,6 +35,7 @@ function user_pass() {
     '#size' => 60,
     '#maxlength' => max(USERNAME_MAX_LENGTH, EMAIL_MAX_LENGTH),
     '#required' => TRUE,
+    '#autofocus' => TRUE,
   );
   $form['submit'] = array('#type' => 'submit', '#value' => t('E-mail new password'));
 
