From 24db763b78cdf6509a33c1312996b633ffcdcf36 Mon Sep 17 00:00:00 2001 From: Dries Buytaert <dries@buytaert.net> Date: Fri, 14 May 2010 16:44:37 +0000 Subject: [PATCH] - Patch #787940 by casey, Kiphaas7: generic approach for position:fixed elements like toolbar. --- misc/displace.js | 17 +++++------------ misc/drupal.js | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/misc/displace.js b/misc/displace.js index 6345ff2c1a9f..261d8accf3f5 100644 --- a/misc/displace.js +++ b/misc/displace.js @@ -4,7 +4,7 @@ /** * Provides a generic method to position elements fixed to the viewport. * - * Fixed positioning (CSS declaration position:fixed) is done relatively to the + * Fixed positioning (CSS declaration position:fixed) is done relative to the * viewport. This makes it hard to position multiple fixed positioned element * relative to each other (e.g. multiple toolbars should come after each other, * not on top of each other). @@ -14,7 +14,7 @@ * port add the class "displace-bottom". * * When a browser doesn't support position:fixed (like IE6) the element gets - * positioned absolutely by default, but this can be overriden by using the + * positioned absolutely by default, but this can be overridden by using the * "displace-unsupported" class. */ @@ -23,16 +23,9 @@ */ Drupal.behaviors.displace = { attach: function (context, settings) { - // Test for position:fixed support as IE6 does not. - // http://yura.thinkweb2.com/cft/#IS_POSITION_FIXED_SUPPORTED - if (this.supported === undefined) { - var el = $('<div style="position:fixed;top:10px"/>').appendTo(document.body); - this.supported = el[0].offsetTop === 10; - el.remove(); - - if (!this.supported) { - $(document.documentElement).addClass('displace-unsupported'); - } + // Test for position:fixed support. + if (!Drupal.positionFixedSupported()) { + $(document.documentElement).addClass('displace-unsupported'); } $(document.body).once('displace', function () { diff --git a/misc/drupal.js b/misc/drupal.js index d6f7597c346d..9d7ec808903a 100644 --- a/misc/drupal.js +++ b/misc/drupal.js @@ -299,6 +299,24 @@ Drupal.getSelection = function (element) { 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. */ -- GitLab