? sites/d7.test
? themes/garland/.goutputstream-YTXZKV
Index: modules/overlay/overlay-child.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/overlay/overlay-child.css,v
retrieving revision 1.6
diff -u -p -r1.6 overlay-child.css
--- modules/overlay/overlay-child.css	28 Jul 2010 01:26:00 -0000	1.6
+++ modules/overlay/overlay-child.css	29 Oct 2010 20:55:22 -0000
@@ -123,6 +123,33 @@ html.js body {
   color: #000;
 }
 
+#overlay-disable-message {
+  margin: 0 auto;
+  min-width: 700px;
+  overflow: hidden;
+  position: relative;
+  text-decoration: none;
+  top: -20px;
+  width: 80%;
+}
+#overlay-disable-message a {
+  display: block;
+  outline: 0;
+}
+#overlay-disable-message a:focus {
+  text-decoration: underline;
+}
+#overlay-profile-link {
+  float: left;
+  padding: 7px 10px;
+}
+
+#overlay-dismiss-message {
+  float: right;
+  margin: 5px 6px;
+  padding: 2px 6px;
+}
+
 /**
  * Add to shortcuts link
  */
Index: modules/overlay/overlay-child.js
===================================================================
RCS file: /cvs/drupal/drupal/modules/overlay/overlay-child.js,v
retrieving revision 1.10
diff -u -p -r1.10 overlay-child.js
--- modules/overlay/overlay-child.js	8 Jul 2010 12:20:23 -0000	1.10
+++ modules/overlay/overlay-child.js	29 Oct 2010 20:55:22 -0000
@@ -57,6 +57,17 @@ Drupal.behaviors.overlayChild = {
 
     // Attach child related behaviors to the iframe document.
     Drupal.overlayChild.attachBehaviors(context, settings);
+    
+    // There are two links within the message that informs people about the
+    // overlay and how to disable it. Make sure both links are visible when
+    // either one has focus.
+    $('#overlay-disable-message', context)
+      .focusin(function () {
+        $('a.element-focusable', this).removeClass('element-invisible');
+      })
+      .focusout(function () {
+        $('a.element-focusable', this).addClass('element-invisible');
+      });
   }
 };
 
Index: modules/overlay/overlay-parent.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/overlay/overlay-parent.css,v
retrieving revision 1.15
diff -u -p -r1.15 overlay-parent.css
--- modules/overlay/overlay-parent.css	8 Jun 2010 05:16:29 -0000	1.15
+++ modules/overlay/overlay-parent.css	29 Oct 2010 20:55:22 -0000
@@ -37,6 +37,18 @@ html.overlay-open .displace-bottom {
 }
 
 /**
+ * Hide the message about disabling the overlay from users and screen readers
+ * when JavaScript is disabled. Without JavaScript, the overlay won't open, so
+ * there is nothing to disable.
+ */
+#overlay-disable-message {
+  display: none;
+}
+html.js #overlay-disable-message {
+  display: block;
+}
+
+/**
  * IE6 shows elements with position:fixed as position:static so replace
  * it with position:absolute;
  */
Index: modules/overlay/overlay-parent.js
===================================================================
RCS file: /cvs/drupal/drupal/modules/overlay/overlay-parent.js,v
retrieving revision 1.55
diff -u -p -r1.55 overlay-parent.js
--- modules/overlay/overlay-parent.js	29 Sep 2010 00:50:46 -0000	1.55
+++ modules/overlay/overlay-parent.js	29 Oct 2010 20:55:23 -0000
@@ -25,6 +25,17 @@ Drupal.behaviors.overlayParent = {
       // scripts to bind their own handlers to links and also to prevent
       // overlay's handling.
       .bind('click.drupal-overlay mouseup.drupal-overlay', $.proxy(Drupal.overlay, 'eventhandlerOverrideLink'));
+
+    // There are two links within the message that informs people about the
+    // overlay and how to disable it. Make sure both links are visible when
+    // either one has focus.
+    $('#overlay-disable-message', context)
+      .focusin(function () {
+        $('a.element-focusable', this).removeClass('element-invisible');
+      })
+      .focusout(function () {
+        $('a.element-focusable', this).addClass('element-invisible');
+      });
   }
 };
 
Index: modules/overlay/overlay.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/overlay/overlay.module,v
retrieving revision 1.31
diff -u -p -r1.31 overlay.module
--- modules/overlay/overlay.module	31 Aug 2010 15:04:09 -0000	1.31
+++ modules/overlay/overlay.module	29 Oct 2010 20:55:23 -0000
@@ -30,10 +30,29 @@ function overlay_menu() {
     'access arguments' => array('access overlay'),
     'type' => MENU_CALLBACK,
   );
+  $items['overlay/dismiss-message'] = array(
+    'title' => '',
+    'page callback' => 'overlay_user_dismiss_message',
+    'access arguments' => array('access overlay'),
+    'type' => MENU_CALLBACK,
+  );
   return $items;
 }
 
 /**
+ * Implements hook_admin_paths().
+ */
+function overlay_admin_paths() {
+  $paths = array(
+    // This is marked as an administrative path so that if it is visited from
+    // within the overlay, the user will stay within the overlay while the
+    // callback is being processed.
+    'overlay/dismiss-message' => TRUE,
+  );
+  return $paths;
+}
+
+/**
  * Implements hook_permission().
  */
 function overlay_permission() {
@@ -254,10 +273,105 @@ function overlay_page_alter(&$page) {
     }
   }
 
-  if (overlay_get_mode() == 'child') {
+  $mode = overlay_get_mode();
+  if ($mode == 'child') {
     // Add the overlay wrapper before the html wrapper.
     array_unshift($page['#theme_wrappers'], 'overlay');
   }
+  elseif ($mode == 'parent' && ($message = _overlay_disable_message())) {
+    $page['page_top']['disable_overlay'] = $message;
+  }
+}
+
+/**
+ * Menu callback; dismisses the overlay accessibility message for this user.
+ */
+function overlay_user_dismiss_message() {
+  global $user;
+  // It's unlikely, but possible that "access overlay" permission is granted to
+  // the anonymous role. In this case, we do not display the message to disable
+  // the overlay, so there is nothing to dismiss. Also, protect against
+  // cross-site request forgeries by validating a token.
+  if (empty($user->uid) || !isset($_GET['token']) || !drupal_valid_token($_GET['token'], 'overlay')) {
+    return MENU_ACCESS_DENIED;
+  }
+  else {
+    user_save(user_load($user->uid), array('data' => array('overlay_message_dismissed' => 1)));
+    drupal_set_message(t('The message has been dismissed. You can change your overlay settings at any time by visiting your profile page.'));
+    // Destination is normally given. Go to the user profile as a fallback.
+    drupal_goto('user/' . $user->uid . '/edit');
+  }
+}
+
+/**
+ * Returns a renderable array representing a message for disabling the overlay.
+ *
+ * If the current user can access the overlay and has not previously indicated
+ * that this message should be dismissed, this function returns a message
+ * containing a link to disable the overlay. Nothing is returned for anonymous
+ * users, because the links control per-user settings. Therefore, because some
+ * screen readers are unable to properly read overlay contents, site builders
+ * are discouraged from granting the "access overlay" permission to the
+ * anonymous role. See http://drupal.org/node/896364.
+ */
+function _overlay_disable_message() {
+  global $user;
+
+  if (!empty($user->uid) && empty($user->data['overlay_message_dismissed']) && (!isset($user->data['overlay']) || $user->data['overlay']) && user_access('access overlay')) {
+    $build = array(
+      // Wrap the two links in a container and add a heading for screen reader
+      // users.
+      '#prefix' => '<div id="overlay-disable-message"><h3 class="element-invisible">' . t('Options for the administrative overlay') . '</h3>',
+      '#suffix' => '</div>',
+      '#weight' => -99,
+      // Link to the user's profile page, where the overlay can be disabled.
+      'profile_link' => array(
+        '#type' => 'link',
+        '#title' => t('If you have problems accessing administrative pages on this site, disable the overlay on your profile page.'),
+        '#href' => 'user/' . $user->uid . '/edit',
+        '#options' => array(
+          'query' => drupal_get_destination(),
+          'fragment' => 'edit-overlay-control',
+          'attributes' => array(
+            'id' => 'overlay-profile-link',
+            // Prevent the target page from being opened in the overlay, and make
+            // this link visible to screen reader users and keyboard users only.
+            'class' => array('overlay-exclude', 'element-invisible', 'element-focusable'),
+          ),
+        ),
+      ),
+      // Link to a menu callback that allows this message to be permanently
+      // dismissed for the current user.
+      'dismiss_message_link' => array(
+        '#type' => 'link',
+        '#title' => ' ' . t('Dismiss this message.'),
+        '#href' => 'overlay/dismiss-message',
+        '#options' => array(
+          'query' => drupal_get_destination() + array(
+            // Add a token to protect against cross-site request forgeries.
+            'token' => drupal_get_token('overlay'),
+          ),
+          'attributes' => array(
+            'id' => 'overlay-dismiss-message',
+            // Make this link visible to screen reader users and keyboard users
+            // only.
+            'class' => array('element-invisible', 'element-focusable'),
+          ),
+        ),
+      )
+    );
+
+    // If this message is being displayed outside the overlay, prevent the
+    // "dismiss" link from opening inside the overlay.
+    if (!path_is_admin(current_path())) {
+      $build['dismiss_message_link']['#options']['attributes']['class'][] = 'overlay-exclude';
+    }
+  }
+  else {
+    $build = array();
+  }
+
+  return $build;
 }
 
 /**
@@ -324,9 +438,9 @@ function overlay_preprocess_maintenance_
  * @see overlay.tpl.php
  */
 function template_preprocess_overlay(&$variables) {
-  $variables['tabs']              = menu_primary_local_tasks();
-  $variables['title']             = drupal_get_title();
-
+  $variables['tabs'] = menu_primary_local_tasks();
+  $variables['title'] = drupal_get_title();
+  $variables['disable_overlay'] = _overlay_disable_message();
   $variables['content_attributes_array']['class'][] = 'clearfix';
 }
 
Index: modules/overlay/overlay.tpl.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/overlay/overlay.tpl.php,v
retrieving revision 1.4
diff -u -p -r1.4 overlay.tpl.php
--- modules/overlay/overlay.tpl.php	16 Sep 2010 19:47:45 -0000	1.4
+++ modules/overlay/overlay.tpl.php	29 Oct 2010 20:55:23 -0000
@@ -21,6 +21,7 @@
  */
 ?>
 
+<?php print render($disable_overlay); ?>
 <div id="overlay" <?php print $attributes; ?>>
   <div id="overlay-titlebar" class="clearfix">
     <div id="overlay-title-wrapper" class="clearfix">
Index: themes/bartik/css/style.css
===================================================================
RCS file: /cvs/drupal/drupal/themes/bartik/css/style.css,v
retrieving revision 1.26
diff -u -p -r1.26 style.css
--- themes/bartik/css/style.css	23 Oct 2010 00:58:51 -0000	1.26
+++ themes/bartik/css/style.css	29 Oct 2010 20:55:24 -0000
@@ -255,6 +255,23 @@ ul.tips {
   position: static;
   width: auto;
 }
+#overlay-disable-message {
+  background: #444;
+  background: rgba(0, 0, 0, 0.6);
+  color: #FFFFFF;
+  font-size: small;
+  border-radius:0 0 10px 10px;
+  -moz-border-radius: 0 0 10px 10px;
+  -webkit-border-top-left-radius: 0;
+  -webkit-border-top-right-radius: 0;
+  -webkit-border-bottom-left-radius: 10px;
+  -webkit-border-bottom-right-radius: 10px;
+}
+
+#overlay-disable-message a {
+  color: #FFFFFF;
+}
+
 #logo,
 #preview #preview-header #preview-logo {
   float: left; /* LTR */
Index: themes/garland/style.css
===================================================================
RCS file: /cvs/drupal/drupal/themes/garland/style.css,v
retrieving revision 1.86
diff -u -p -r1.86 style.css
--- themes/garland/style.css	27 Sep 2010 01:12:45 -0000	1.86
+++ themes/garland/style.css	29 Oct 2010 20:55:24 -0000
@@ -338,6 +338,26 @@ span.form-required {
 }
 
 /**
+ * Disable overlay
+ */
+#overlay-disable-message {
+  background: #444;
+  background: rgba(0, 0, 0, 0.6);
+  color: #FFFFFF;
+  font-size: small;
+  border-radius:0 0 2px 2px;
+  -moz-border-radius: 0 0 2px 2px;
+  -webkit-border-top-left-radius: 0;
+  -webkit-border-top-right-radius: 0;
+  -webkit-border-bottom-left-radius: 2px;
+  -webkit-border-bottom-right-radius: 2px;
+}
+
+#overlay-disable-message a {
+  color: #FFFFFF;
+}
+
+/**
  * Layout
  */
 .region-header {
Index: themes/seven/style.css
===================================================================
RCS file: /cvs/drupal/drupal/themes/seven/style.css,v
retrieving revision 1.80
diff -u -p -r1.80 style.css
--- themes/seven/style.css	15 Oct 2010 04:37:15 -0000	1.80
+++ themes/seven/style.css	29 Oct 2010 20:55:24 -0000
@@ -153,21 +153,22 @@ pre {
   left: 50%;
   margin-left: -5.25em;
   width: auto;
-  z-index: 50;
+  z-index: 550;
 }
 #skip-link a,
 #skip-link a:link,
 #skip-link a:visited {
   position: absolute;
   display: block;
-  top: auto;
-  left: -10000px;
+  top: -10000px;
   width: 1px;
   height: 1px;
-  background: #444;
-  color: #fff;
-  font-size: 0.94em;
+  background: #b4d7f0;
+  color: #000;
+  padding: 5px 10px; 
+  font-size: small;
   text-decoration: none;
+  white-space: nowrap;
   border-radius:0 0 10px 10px;
   -moz-border-radius: 0 0 10px 10px;
   -webkit-border-top-left-radius: 0;
@@ -178,11 +179,43 @@ pre {
 #skip-link a:hover,
 #skip-link a:active,
 #skip-link a:focus {
-  position: static;
+  top: auto;
   width: auto;
   height: auto;
   overflow: visible;
-  padding: 1px 10px 2px 10px;
+}
+.overlay #skip-link a:hover,
+.overlay #skip-link a:active,
+.overlay #skip-link a:focus {
+  top: -20px;
+}
+
+#overlay-disable-message {
+  background: #b4d7f0;
+  color: #000;
+  font-size: small;
+  border-radius:0 0 10px 10px;
+  -moz-border-radius: 0 0 10px 10px;
+  -webkit-border-top-left-radius: 0;
+  -webkit-border-top-right-radius: 0;
+  -webkit-border-bottom-left-radius: 10px;
+  -webkit-border-bottom-right-radius: 10px;
+}
+
+#overlay-disable-message a {
+  color: #000;
+}
+
+#overlay-dismiss-message {
+  background: #6FB2DF;
+  color: #fff;
+  font-size: 0.857em;
+  border-radius: 4px;
+  -moz-border-radius: 4px;
+  -webkit-border-top-left-radius: 4px;
+  -webkit-border-top-right-radius: 4px;
+  -webkit-border-bottom-left-radius: 4px;
+  -webkit-border-bottom-right-radius: 4px;
 }
 
 /**
