Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / misc / displace.es6.js
index 6ac09f4e6aae63778a7e40ef991f0d7fd4e21c4d..e3909c9d88c531d7560fcb3854bb73c116ad2c49 100644 (file)
@@ -24,7 +24,7 @@
  * @event drupalViewportOffsetChange
  */
 
-(function ($, Drupal, debounce) {
+(function($, Drupal, debounce) {
   /**
    * @name Drupal.displace.offsets
    *
   };
 
   /**
-   * Registers a resize handler on the window.
-   *
-   * @type {Drupal~behavior}
-   */
-  Drupal.behaviors.drupalDisplace = {
-    attach() {
-      // Mark this behavior as processed on the first pass.
-      if (this.displaceProcessed) {
-        return;
-      }
-      this.displaceProcessed = true;
-
-      $(window).on('resize.drupalDisplace', debounce(displace, 200));
-    },
-  };
-
-  /**
-   * Informs listeners of the current offset dimensions.
-   *
-   * @function Drupal.displace
-   *
-   * @prop {Drupal~displaceOffset} offsets
+   * Calculates displacement for element based on its dimensions and placement.
    *
-   * @param {bool} [broadcast]
-   *   When true or undefined, causes the recalculated offsets values to be
-   *   broadcast to listeners.
+   * @param {HTMLElement} el
+   *   The jQuery element whose dimensions and placement will be measured.
    *
-   * @return {Drupal~displaceOffset}
-   *   An object whose keys are the for sides an element -- top, right, bottom
-   *   and left. The value of each key is the viewport displacement distance for
-   *   that edge.
+   * @param {string} edge
+   *   The name of the edge of the viewport that the element is associated
+   *   with.
    *
-   * @fires event:drupalViewportOffsetChange
+   * @return {number}
+   *   The viewport displacement distance for the requested edge.
    */
-  function displace(broadcast) {
-    offsets = calculateOffsets();
-    Drupal.displace.offsets = offsets;
-    if (typeof broadcast === 'undefined' || broadcast) {
-      $(document).trigger('drupalViewportOffsetChange', offsets);
-    }
-    return offsets;
-  }
+  function getRawOffset(el, edge) {
+    const $el = $(el);
+    const documentElement = document.documentElement;
+    let displacement = 0;
+    const horizontal = edge === 'left' || edge === 'right';
+    // Get the offset of the element itself.
+    let placement = $el.offset()[horizontal ? 'left' : 'top'];
+    // Subtract scroll distance from placement to get the distance
+    // to the edge of the viewport.
+    placement -=
+      window[`scroll${horizontal ? 'X' : 'Y'}`] ||
+      document.documentElement[`scroll${horizontal ? 'Left' : 'Top'}`] ||
+      0;
+    // Find the displacement value according to the edge.
+    switch (edge) {
+      // Left and top elements displace as a sum of their own offset value
+      // plus their size.
+      case 'top':
+        // Total displacement is the sum of the elements placement and size.
+        displacement = placement + $el.outerHeight();
+        break;
 
-  /**
-   * Determines the viewport offsets.
-   *
-   * @return {Drupal~displaceOffset}
-   *   An object whose keys are the for sides an element -- top, right, bottom
-   *   and left. The value of each key is the viewport displacement distance for
-   *   that edge.
-   */
-  function calculateOffsets() {
-    return {
-      top: calculateOffset('top'),
-      right: calculateOffset('right'),
-      bottom: calculateOffset('bottom'),
-      left: calculateOffset('left'),
-    };
+      case 'left':
+        // Total displacement is the sum of the elements placement and size.
+        displacement = placement + $el.outerWidth();
+        break;
+
+      // Right and bottom elements displace according to their left and
+      // top offset. Their size isn't important.
+      case 'bottom':
+        displacement = documentElement.clientHeight - placement;
+        break;
+
+      case 'right':
+        displacement = documentElement.clientWidth - placement;
+        break;
+
+      default:
+        displacement = 0;
+    }
+    return displacement;
   }
 
   /**
    */
   function calculateOffset(edge) {
     let edgeOffset = 0;
-    const displacingElements = document.querySelectorAll(`[data-offset-${edge}]`);
+    const displacingElements = document.querySelectorAll(
+      `[data-offset-${edge}]`,
+    );
     const n = displacingElements.length;
     for (let i = 0; i < n; i++) {
       const el = displacingElements[i];
       // If the element's offset data attribute exits
       // but is not a valid number then get the displacement
       // dimensions directly from the element.
+      // eslint-disable-next-line no-restricted-globals
       if (isNaN(displacement)) {
         displacement = getRawOffset(el, edge);
       }
   }
 
   /**
-   * Calculates displacement for element based on its dimensions and placement.
+   * Determines the viewport offsets.
    *
-   * @param {HTMLElement} el
-   *   The jQuery element whose dimensions and placement will be measured.
+   * @return {Drupal~displaceOffset}
+   *   An object whose keys are the for sides an element -- top, right, bottom
+   *   and left. The value of each key is the viewport displacement distance for
+   *   that edge.
+   */
+  function calculateOffsets() {
+    return {
+      top: calculateOffset('top'),
+      right: calculateOffset('right'),
+      bottom: calculateOffset('bottom'),
+      left: calculateOffset('left'),
+    };
+  }
+
+  /**
+   * Informs listeners of the current offset dimensions.
    *
-   * @param {string} edge
-   *   The name of the edge of the viewport that the element is associated
-   *   with.
+   * @function Drupal.displace
    *
-   * @return {number}
-   *   The viewport displacement distance for the requested edge.
+   * @prop {Drupal~displaceOffset} offsets
+   *
+   * @param {bool} [broadcast]
+   *   When true or undefined, causes the recalculated offsets values to be
+   *   broadcast to listeners.
+   *
+   * @return {Drupal~displaceOffset}
+   *   An object whose keys are the for sides an element -- top, right, bottom
+   *   and left. The value of each key is the viewport displacement distance for
+   *   that edge.
+   *
+   * @fires event:drupalViewportOffsetChange
    */
-  function getRawOffset(el, edge) {
-    const $el = $(el);
-    const documentElement = document.documentElement;
-    let displacement = 0;
-    const horizontal = (edge === 'left' || edge === 'right');
-    // Get the offset of the element itself.
-    let placement = $el.offset()[horizontal ? 'left' : 'top'];
-    // Subtract scroll distance from placement to get the distance
-    // to the edge of the viewport.
-    placement -= window[`scroll${horizontal ? 'X' : 'Y'}`] || document.documentElement[`scroll${horizontal ? 'Left' : 'Top'}`] || 0;
-    // Find the displacement value according to the edge.
-    switch (edge) {
-      // Left and top elements displace as a sum of their own offset value
-      // plus their size.
-      case 'top':
-        // Total displacement is the sum of the elements placement and size.
-        displacement = placement + $el.outerHeight();
-        break;
-
-      case 'left':
-        // Total displacement is the sum of the elements placement and size.
-        displacement = placement + $el.outerWidth();
-        break;
-
-      // Right and bottom elements displace according to their left and
-      // top offset. Their size isn't important.
-      case 'bottom':
-        displacement = documentElement.clientHeight - placement;
-        break;
-
-      case 'right':
-        displacement = documentElement.clientWidth - placement;
-        break;
-
-      default:
-        displacement = 0;
+  function displace(broadcast) {
+    offsets = calculateOffsets();
+    Drupal.displace.offsets = offsets;
+    if (typeof broadcast === 'undefined' || broadcast) {
+      $(document).trigger('drupalViewportOffsetChange', offsets);
     }
-    return displacement;
+    return offsets;
   }
 
+  /**
+   * Registers a resize handler on the window.
+   *
+   * @type {Drupal~behavior}
+   */
+  Drupal.behaviors.drupalDisplace = {
+    attach() {
+      // Mark this behavior as processed on the first pass.
+      if (this.displaceProcessed) {
+        return;
+      }
+      this.displaceProcessed = true;
+
+      $(window).on('resize.drupalDisplace', debounce(displace, 200));
+    },
+  };
+
   /**
    * Assign the displace function to a property of the Drupal global object.
    *
    */
   Drupal.displace = displace;
   $.extend(Drupal.displace, {
-
     /**
      * Expose offsets to other scripts to avoid having to recalculate offsets.
      *
      */
     calculateOffset,
   });
-}(jQuery, Drupal, Drupal.debounce));
+})(jQuery, Drupal, Drupal.debounce);