- Rollback of #787940.

merge-requests/26/head
Dries Buytaert 2010-05-23 18:23:32 +00:00
parent 8ce167452b
commit 5d4fa6f725
9 changed files with 89 additions and 40 deletions

View File

@ -299,24 +299,6 @@ Drupal.getSelection = function (element) {
return { 'start': element.selectionStart, 'end': element.selectionEnd }; return { 'start': element.selectionStart, 'end': element.selectionEnd };
}; };
/**
* Checks if position:fixed is supported.
*
* @return
* Boolean indicating whether or not position:fixed is supported.
*
* @see http://yura.thinkweb2.com/cft/#IS_POSITION_FIXED_SUPPORTED
*/
Drupal.positionFixedSupported = function () {
if (this._positionFixedSupported === undefined) {
var el = $('<div style="position:fixed; top:10px" />').appendTo(document.body);
this._positionFixedSupported = el[0].offsetTop === 10;
el.remove();
}
return this._positionFixedSupported;
};
/** /**
* Build an error message from an AJAX response. * Build an error message from an AJAX response.
*/ */

View File

@ -42,7 +42,7 @@ Drupal.behaviors.tableHeader = {
// Track positioning and visibility. // Track positioning and visibility.
function tracker(e) { function tracker(e) {
// Reset top position of sticky table headers to the current top offset. // Reset top position of sticky table headers to the current top offset.
var topOffset = Drupal.displace ? Drupal.displace.getDisplacement('top') : 0; var topOffset = Drupal.settings.tableHeaderOffset ? eval(Drupal.settings.tableHeaderOffset + '()') : 0;
$('.sticky-header').css('top', topOffset + 'px'); $('.sticky-header').css('top', topOffset + 'px');
// Save positioning data. // Save positioning data.
var viewHeight = document.documentElement.scrollHeight || document.body.scrollHeight; var viewHeight = document.documentElement.scrollHeight || document.body.scrollHeight;

View File

@ -650,9 +650,15 @@ Drupal.overlay.outerResize = function () {
return; return;
} }
var displaceTop = Drupal.displace ? Drupal.displace.getDisplacement('top') : 0; // Consider any region that should be visible above the overlay (such as
// an admin toolbar).
var $displaceTop = $('.overlay-displace-top');
var displaceTopHeight = 0;
$displaceTop.each(function () {
displaceTopHeight += $(this).height();
});
self.$wrapper.css('top', displaceTop); self.$wrapper.css('top', displaceTopHeight);
// When the overlay has no height yet, make it fit exactly in the window, // When the overlay has no height yet, make it fit exactly in the window,
// or the configured height when autoFit is disabled. // or the configured height when autoFit is disabled.
@ -660,7 +666,7 @@ Drupal.overlay.outerResize = function () {
var titleBarHeight = self.$dialogTitlebar.outerHeight(true); var titleBarHeight = self.$dialogTitlebar.outerHeight(true);
if (self.options.autoFit || self.options.height == undefined ||!isNan(self.options.height)) { if (self.options.autoFit || self.options.height == undefined ||!isNan(self.options.height)) {
self.lastHeight = parseInt($(window).height() - displaceTop - titleBarHeight - 45); self.lastHeight = parseInt($(window).height() - displaceTopHeight - titleBarHeight - 45);
} }
else { else {
self.lastHeight = self.options.height; self.lastHeight = self.options.height;
@ -697,11 +703,11 @@ Drupal.overlay.clickHandler = function (event) {
var $target = $(event.target); var $target = $(event.target);
if (self.isOpen && $target.closest('.displace-top, .displace-bottom').length) { if (self.isOpen && $target.closest('.overlay-displace-top, .overlay-displace-bottom').length) {
// Click events in displaced regions could potentionally change the size of // Click events in displaced regions could potentionally change the size of
// that region (e.g. the toggle button of the toolbar module). Trigger the // that region (e.g. the toggle button of the toolbar module). Trigger the
// resize event to force a recalculation of overlay's size/position. // resize event to force a recalculation of overlay's size/position.
$(window).triggerHandler('resize'); $(window).triggerHandler('resize.overlay-event');
} }
// Only continue by left-click or right-click. // Only continue by left-click or right-click.
@ -923,7 +929,7 @@ Drupal.overlay.resetActiveClass = function(activePath) {
var self = this; var self = this;
var windowDomain = window.location.protocol + window.location.hostname; var windowDomain = window.location.protocol + window.location.hostname;
$('.displace-top, .displace-bottom') $('.overlay-displace-top, .overlay-displace-bottom')
.find('a[href]') .find('a[href]')
// Remove active class from all links in displaced regions. // Remove active class from all links in displaced regions.
.removeClass('active') .removeClass('active')

View File

@ -299,6 +299,16 @@ function overlay_preprocess_page(&$variables) {
} }
} }
/**
* Preprocess template variables for toolbar.tpl.php.
*
* Adding the 'overlay-displace-top' class to the toolbar pushes the overlay
* down, so it appears below the toolbar.
*/
function overlay_preprocess_toolbar(&$variables) {
$variables['classes_array'][] = "overlay-displace-top";
}
/** /**
* Form after_build callback. * Form after_build callback.
* *

View File

@ -274,6 +274,26 @@ tr.selected td {
position: absolute; position: absolute;
} }
/*
** To be used with displace.js
*/
.displace-top,
.displace-bottom {
position: relative;
width: 100%;
}
.displace-processed .displace-top,
.displace-processed .displace-bottom {
position: fixed;
width: auto;
left: 0;
right: 0;
}
.displace-unsupported .displace-top,
.displace-unsupported .displace-bottom {
position: absolute;
}
/* /*
** Floating header for tableheader.js ** Floating header for tableheader.js
*/ */

View File

@ -1,6 +1,12 @@
/* $Id$ */ /* $Id$ */
body.toolbar {
padding-top: 2.2em;
}
body.toolbar-drawer {
padding-top: 5.3em;
}
/** /**
* Aggressive resets so we can achieve a consistent look in hostile CSS * Aggressive resets so we can achieve a consistent look in hostile CSS
@ -26,8 +32,10 @@
font: normal 0.9em "Lucida Grande", Verdana, sans-serif; font: normal 0.9em "Lucida Grande", Verdana, sans-serif;
background: #666; background: #666;
color: #ccc; color: #ccc;
} position: fixed;
.displace-processed #toolbar { top: 0;
left: 0;
right: 0;
margin: 0 -20px; margin: 0 -20px;
padding: 0 20px; padding: 0 20px;
z-index: 600; z-index: 600;
@ -37,14 +45,6 @@
filter: progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10'); filter: progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10');
-ms-filter: "progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10')"; -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10')";
} }
.displace-unsupported #toolbar {
margin: 0;
padding-right: 0;
left: -20px;
right: 0;
width: 100%;
}
#toolbar div.collapsed { #toolbar div.collapsed {
display: none; display: none;
@ -132,3 +132,18 @@
position: relative; position: relative;
padding: 0 10px; padding: 0 10px;
} }
/**
* IE 6 Fix.
*
* IE 6 shows elements with position:fixed as position:static so we replace
* it with position:absolute; toolbar needs it's z-index to stay above overlay.
*/
* html #toolbar {
position: absolute;
margin: 0;
padding-right: 0;
left: -20px;
right: 0;
width: 100%;
}

View File

@ -15,8 +15,9 @@ Drupal.behaviors.toolbar = {
// Toggling toolbar drawer. // Toggling toolbar drawer.
$('#toolbar a.toggle', context).once('toolbar-toggle').click(function(e) { $('#toolbar a.toggle', context).once('toolbar-toggle').click(function(e) {
Drupal.toolbar.toggle(); Drupal.toolbar.toggle();
// Allow resize event handlers to recalculate sizes/positions. // As the toolbar is an overlay displaced region, overlay should be
$(window).triggerHandler('resize'); // notified of it's height change to adapt its position.
$(window).triggerHandler('resize.overlay-event');
return false; return false;
}); });
} }
@ -48,6 +49,7 @@ Drupal.toolbar.collapse = function() {
.removeClass('toggle-active') .removeClass('toggle-active')
.attr('title', toggle_text) .attr('title', toggle_text)
.html(toggle_text); .html(toggle_text);
$('body').removeClass('toolbar-drawer').css('paddingTop', Drupal.toolbar.height());
$.cookie( $.cookie(
'Drupal.toolbar.collapsed', 'Drupal.toolbar.collapsed',
1, 1,
@ -69,6 +71,7 @@ Drupal.toolbar.expand = function() {
.addClass('toggle-active') .addClass('toggle-active')
.attr('title', toggle_text) .attr('title', toggle_text)
.html(toggle_text); .html(toggle_text);
$('body').addClass('toolbar-drawer').css('paddingTop', Drupal.toolbar.height());
$.cookie( $.cookie(
'Drupal.toolbar.collapsed', 'Drupal.toolbar.collapsed',
0, 0,
@ -92,4 +95,14 @@ Drupal.toolbar.toggle = function() {
} }
}; };
Drupal.toolbar.height = function() {
var height = $('#toolbar').outerHeight();
// In IE, Shadow filter adds some extra height, so we need to remove it from
// the returned height.
if ($('#toolbar').css('filter').match(/DXImageTransform\.Microsoft\.Shadow/)) {
height -= $('#toolbar').get(0).filters.item("DXImageTransform.Microsoft.Shadow").strength;
}
return height;
};
})(jQuery); })(jQuery);

View File

@ -177,9 +177,12 @@ function toolbar_view() {
'#theme' => 'toolbar', '#theme' => 'toolbar',
'#attached'=> array( '#attached'=> array(
'js' => array( 'js' => array(
array('data' => 'misc/displace.js', 'weight' => JS_LIBRARY - 1),
array('data' => 'misc/jquery.cookie.js', 'weight' => JS_LIBRARY + 2),
$module_path . '/toolbar.js', $module_path . '/toolbar.js',
array('data' => 'misc/jquery.cookie.js', 'weight' => JS_LIBRARY + 2),
array(
'data' => array('tableHeaderOffset' => 'Drupal.toolbar.height'),
'type' => 'setting'
),
), ),
'css' => array( 'css' => array(
$module_path . '/toolbar.css', $module_path . '/toolbar.css',

View File

@ -22,7 +22,7 @@
* @see template_preprocess_toolbar() * @see template_preprocess_toolbar()
*/ */
?> ?>
<div id="toolbar" class="<?php print $classes; ?> displace-top clearfix"> <div id="toolbar" class="<?php print $classes; ?> clearfix">
<div class="toolbar-menu clearfix"> <div class="toolbar-menu clearfix">
<?php print render($toolbar['toolbar_home']); ?> <?php print render($toolbar['toolbar_home']); ?>
<?php print render($toolbar['toolbar_user']); ?> <?php print render($toolbar['toolbar_user']); ?>