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