Index: misc/contextual_links.css
===================================================================
RCS file: /cvs/drupal/drupal/misc/contextual_links.css,v
retrieving revision 1.1
diff -u -p -r1.1 contextual_links.css
--- misc/contextual_links.css	17 Oct 2009 05:50:27 -0000	1.1
+++ misc/contextual_links.css	22 Nov 2009 14:53:45 -0000
@@ -7,10 +7,32 @@
   outline: none;
   position: relative;
 }
-.contextual-links-region-active {
-  outline: #000 dashed 1px;
+.js .contextual-links-region-active {
+  outline: none;
 }
 
+
+/**
+ * Contextual links js controls.
+ */
+.contextual-links-wrapper {
+  position: absolute;
+  top: 0;
+  right: 0;
+  text-align: right;
+}
+.contextual-links-trigger {
+  visibility: hidden;
+  opacity: 0.5;
+}
+.contextual-links-wrapper:hover .contextual-links-trigger {
+  opacity: 1;
+}
+.contextual-links-region-active .contextual-links-trigger {
+  visibility: visible;
+}
+
+
 /**
  * Contextual links.
  */
@@ -19,6 +41,13 @@ ul.contextual-links {
   font-size: 90%;
   margin: 0;
   padding: 0;
+  text-align: left;
+}
+.js .block ul.contextual-links {
+  display: none;
+  float: none;
+  border: 1px solid #ddd;
+  background-color: #fff;
 }
 ul.contextual-links li {
   border-left: 1px solid #ccc;
@@ -28,11 +57,24 @@ ul.contextual-links li {
   margin: 0 0 0 0.3em;
   padding: 0 0 0 0.6em;
 }
+.js ul.contextual-links li {
+  border: none;
+  display: list-item;
+  margin: 0;
+  padding: 0.4em;
+}
 ul.contextual-links li.first {
   border-left: 0;
   margin: 0;
   padding: 0;
 }
+.js ul.contextual-links li.first {
+  padding: 0.4em;
+}
 ul.contextual-links li a {
   text-decoration: none;
 }
+.js ul.contextual-links li a {
+  display: block;
+  zoom: 1;
+}
Index: misc/contextual_links.js
===================================================================
RCS file: /cvs/drupal/drupal/misc/contextual_links.js,v
retrieving revision 1.1
diff -u -p -r1.1 contextual_links.js
--- misc/contextual_links.js	17 Oct 2009 05:50:27 -0000	1.1
+++ misc/contextual_links.js	22 Nov 2009 14:53:45 -0000
@@ -8,26 +8,32 @@ Drupal.contextualLinks = Drupal.contextu
  */
 Drupal.behaviors.contextualLinks = {
   attach: function (context) {
-    $('ul.contextual-links', context).once('contextual-links', function () {
-      $(this).hover(Drupal.contextualLinks.hover, Drupal.contextualLinks.hoverOut);
-    });
-  }
-};
-
-/**
- * Enables outline for the region contextual links are associated with.
- */
-Drupal.contextualLinks.hover = function () {
-  $(this).addClass('contextual-links-link-active')
-    .closest('.contextual-links-region').addClass('contextual-links-region-active');
-};
+    $('.contextual-links-region', context).once('contextual-links-region', function () {
+      // add/remove appropriate region classes on hover
+      $(this).hover(function() {
+        $(this).addClass('contextual-links-region-active');
+      }, function() {
+        $(this).removeClass('contextual-links-region-active');
+      });
 
-/**
- * Disables outline for the region contextual links are associated with.
- */
-Drupal.contextualLinks.hoverOut = function () {
-  $(this).removeClass('contextual-links-link-active')
-    .closest('.contextual-links-region').removeClass('contextual-links-region-active');
-};
+      // cache the selector for later
+      var $links = $('ul.contextual-links', this)
+        // wrap the contextual links with a helper div
+        .wrap('<div class="contextual-links-wrapper"></div>')
+        // add a trigger button
+        .before('<button class="contextual-links-trigger">Menu</button>')
+        // resolve hover classes and behavior on links
+        .hover(function() {
+          $(this).addClass('contextual-links-link-active');
+        }, function() {
+          $(this).removeClass('contextual-links-link-active').hide();
+        });
 
+      // clicking the trigger reveals the contextual links
+      $('.contextual-links-trigger', this).click(function() {
+        $links.fadeIn();
+      });
+    });
+  }
+}
 })(jQuery);
