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('
') + // add a trigger button + .before('') + // 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);